Avatar billede lordnelson Seniormester
05. april 2007 - 14:32 Der er 16 kommentarer og
2 løsninger

Cpr check med 2 felter

Hej
Har 2 felter til cprnr
cprnrsend1 og cprnrsend2

Er der en her der vil hjælpe med at få en validering
på disse 2 felter, har set lidt på validering af cpr nr
men de er alle på 1 felt

LN
Avatar billede thesurfer Nybegynder
05. april 2007 - 14:42 #1
Her vil RegEx (Regular Expression) være ideelt..

CPR-nr. er opbygget således:

aabbcc-ddde

aa = 2 cifret tal der angiver dag, intervallet er: 01-31 (husk februar: 01-28/29)
bb = 2 cifret tal der angiver måned, intervallet er: 01-12
cc = 2 cifret tal der angiver år, intervallet er: 00-99
ddd = 3 cifret tal der angiver løbenummer, intervallet er: 001-999 (tror jeg)
e = 1 cifret tal der angiver kontrolcifre, intervallet er: 0-9

Ang. kontrolcifret:
Hvis tallet er et ulig tal (1,3,5,7,9) er personen en mand.
Hvis taller er et lig tal (0,2,4,6,8) er personen en kvinde.

Men der kommer (snart?) et nyt system, så det her system vil ikke kunne bruges..
Avatar billede thesurfer Nybegynder
05. april 2007 - 14:45 #2
..og så skal der bruges modulus 11, til udregning af cpr.nr., for at kontrollere om det er et gyldigt nummer eller ej..

Modulus 11 er på vej ud.. når det nye system træder ikraft.. men der går vist noget tid endnu..
Avatar billede lordnelson Seniormester
05. april 2007 - 14:55 #3
Ja har lavet det i Visual basic
men indrømmer er ikke god til
javascript. Kan gost se at du har hjulpet en eller flere med kode
i javascript, men indrømmer igen kan ikke finde ud af det?
derfor også lidt point
LN
Avatar billede thesurfer Nybegynder
05. april 2007 - 15:13 #4
Her er koden i C#.. Så skal koden bare oversætte til JavaScript.. hvilket ikke er så svært..

    public partial class Form1 : Form
    {
        int[] kontrol = { 4, 3, 2, 7, 6, 5, 4, 3, 2, 1 };
        string _m = "13579";
        string _f = "24680";
        bool _is_m = true;
        string _nr = "";
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            _is_m = true;
            if (rbtnFemale.Checked == true) _is_m = false;
            string _last = "";
            string _g = _m;
            if (!_is_m) _g = _f;
            for (int i = 0; i < 5999; i++)
            {
                _last = "000" + i;
                _last = _last.Substring(_last.Length - 4);
                if (_g.IndexOf(_last.Substring(_last.Length - 1)) > -1)
                {
                    _nr = tbxC.Text + _last;
                    if (_check()) listBox1.Items.Add(_nr);
                }
            }
        }

        private bool _check()
        {
            int _out = 0;
            for (int i = 0; i < _nr.Length; i++)
            {
                _out += kontrol[i] * int.Parse(_nr.Substring(i, 1));
            }
            if (_out % 11 == 0) return true;
            return false;
        }

        private void btnValidate_Click(object sender, EventArgs e)
        {
            _nr = tbxVC.Text;
            MessageBox.Show(_check().ToString());
        }
    }
Avatar billede thesurfer Nybegynder
05. april 2007 - 15:36 #5
Jeg ser om jeg kan oversætte det i aften..
Avatar billede thesurfer Nybegynder
05. april 2007 - 15:39 #6
Hvis der er nogen der vil oversætte i det i mellemtiden, så skal button1_Click-funktionen ikke bruges..

Det gør bare det, at den skriver samtlige muligheder over i en listbox..
Avatar billede thesurfer Nybegynder
05. april 2007 - 21:44 #7
Sådan:

<script type="text/JavaScript" language="JavaScript">
kontrol = new Array( "4", "3", "2", "7", "6", "5", "4", "3", "2", "1" );

function checkcpr(cprnr)
{
if (cprnr.length != 10) return "cpr.nr. skal være på 10 cifre!";
cprnr = cprnr.replace(" ", ""); // fjern mellemrum
cprnr = cprnr.replace("-", ""); // fjern bindestreg

output = 0;
for (i = 0; i < 10; i++)
{
    output += ( parseInt(kontrol[i]) * parseInt(cprnr.substr(i, 1)) );
}

if (output % 11 == 0) return "Gyldigt";
return "Ugyldigt";
}

alert(checkcpr("1234567890"));
</script>


Du kalder funktionen med: checkcpr("1234567890").
Det returnerer enten "Gyldigt" eller "Ugyldigt".

Mht at samle de to felter, er det bare sådan her:

cpr = document.FORMENSNAVN.FELTNR1.value + document.FORMENSNAVN.FELTNR2.value;
alert(checkcpr(cpr));

Det er helt op til dig, om du vil bruge alert, eller hvordan du vil bruge det..

Du kan også evt flytte kontrol-erklæringen ind i funktion:

function checkcpr(cprnr)
{
kontrol = new Array( "4", "3", "2", "7", "6", "5", "4", "3", "2", "1" );

...osv...
}
Avatar billede thesurfer Nybegynder
05. april 2007 - 21:45 #8
Svar :-)
Avatar billede thesurfer Nybegynder
05. april 2007 - 21:46 #9
Jeg lagde lige mærke til, at du har skrevet navnene på felterne..

Så:

cpr = document.FORMENSNAVN.cprnrsend1.value + document.FORMENSNAVN.cprnrsend2.value;

Du skal stadig rette "FORMENSNAVN" til, så det passer overens med formens navn..
Avatar billede lordnelson Seniormester
06. april 2007 - 00:13 #10
hej kan ikke forstå den fejl jeg får
Har:
<script>


function checkcpr(cprnr)


{
kontrol = new Array( "4", "3", "2", "7", "6", "5", "4", "3", "2", "1" );
cpr = document.start.cprnrsend1.value + document.start.cprnrsend2.value;
if (cprnr.length != 10) return "cpr.nr. skal være på 10 cifre!";
cprnr = cprnr.replace(" ", ""); // fjern mellemrum
cprnr = cprnr.replace("-", ""); // fjern bindestreg

output = 0;
for (i = 0; i < 10; i++)
{
    output += ( parseInt(kontrol[i]) * parseInt(cprnr.substr(i, 1)) );
}

if (output % 11 == 0) return "Gyldigt";
return "Ugyldigt";
}

alert(checkcpr("1234567890"));
</script>

<script language="javascript">
function CheckVal()
{
  if(this.document.myform.mycheckbox2.checked)
  {
    var elem = document.getElementById('nr1').style;
    elem.display="block";
  }
  else
  {
    var elem3 = document.getElementById('nr1').style;
    elem3.display="none";

  }
}
</script>
Men allerede inden jeg sumitter får jeg fejl på
document.start.cprnrsend1.value 

med er nul eller ikke et object
kunne jo have skrevet fejl i form navn eller felt men den her virker:
her får jeg ikke fejl på document.start.cprnrsend1

function strid(){
navnerr="Formularen blev ikke afsendt grundet:"; // Start tekst til fejl
    if(document.start.cprnrsend1.value==""){
    navnerr+="\nscrnrsend1 skal udfyldes"; // Hvis adresse ikke indeholder registreres fejl
   
  }
if(navnerr==navnerr)return true; // Hvis start tekst er standard så afsend

  else{
    alert(navnerr); // ved fejl så alert
    elmf.focus(); // Fokuser på første fejl
    return false; // og stop afsendelse
  }

}
 
  </script>
kan sgu ikke forstå det formen hedder start og feltet cprnrsend1

LN
Avatar billede roenving Novice
06. april 2007 - 00:26 #11
Kopi fra et gammelt spørgsmål, hvor der kun var et felt (det'r zq 3½ år gammelt !-)

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<html>
<head>
<title>Valider CPR nr</title>
<meta name="Generator" content="Stone's WebWriter 4">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/javascript">
function cprTjeck(frm){
  var cpr = frm.cprnrsend1.value + frm.cprnrsend2.value;
  if(cpr.match(/\d{6}\-?\d{4}/)){
    var aar = +cpr.substr(4,2)+2000;
    aar -= (aar>new Date().getFullYear())?100:0;
    var maaned = +cpr.substr(2,2)-1;
    var dag = +cpr.substr(0,2);
    var dato = new Date(aar,maaned,dag);
    cpr = cpr.replace(/\-/g,"");
    var chk = 0;
    for(i=9;i>-1;i--){
      chk += (+cpr.charAt(i))*((i>2)?(10-i):(4-i));
    }
    if(chk%11==0&&dato.getFullYear()==aar&&dato.getMonth()==maaned&&dato.getDate()==dag)return true;
  }
  alert("ikke valid CPR");
  return false;
}
</script>
</head>
<body>
<form name="form1" method="post" onSubmit="return cprTjeck(this);">
  <input type="text" name="cprnrsend1" size="6"> -
  <input type="text" name="cprnrsend2" size="4">
  <input type="submit" name="Submit" value="Submit">
</form>
</body>
</html>
Avatar billede thesurfer Nybegynder
06. april 2007 - 00:30 #12
roenving> Det er da noget komplekst ud, sammenlignet med min.. hvad bruger du datoen til?
Avatar billede thesurfer Nybegynder
06. april 2007 - 00:34 #13
lordnelson> Hvornår kalder du funtionen checkcpr?

Formen skal oprettes før du kalder funktionen..

Eksempel:

- Forkert:
<script... >
function...
{
...
}

checkcpr(..)
</script>

<form ...>
...
</form>

Her er formen ikke indlæst/oprettet endnu, men funktionen kaldes alligevel.

- Korrekt:

<form ...>
...
</form>

<script... >
function...
{
...
}

checkcpr(..)
</script>

Eller

<body onload="checkcpr('1234567890');">



Så spørgmålet er:

Hvornår kalder du funktionen?
Avatar billede roenving Novice
06. april 2007 - 00:56 #14
>>strandløve

-- det nytter ikke noget, at en dato opfylder modulus-11-tingen, hvis datoen slet ikke eksisterer !-)

F.eks. opfylder 310207-0002 sagtens modulus-kravet, men det er ligesom lidt ligegyldigt, når sådan en dato ikke findes !o]
Avatar billede lordnelson Seniormester
06. april 2007 - 09:02 #15
øh ved ikke hvad jeg skal gøre
har fået det til at virke med roenving's eksempel
ikke med det andet

LN
Avatar billede roenving Novice
06. april 2007 - 11:09 #16
Jamen, så kan vi da bare dele ?-)

Velbekomme '-)
Avatar billede roenving Novice
06. april 2007 - 12:19 #17
-- og tak for point ;~}
Avatar billede lordnelson Seniormester
06. april 2007 - 13:20 #18
selv tak
håber det også er iorden med thesurfer

LN
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester