Avatar billede para7 Nybegynder
28. april 2003 - 11:18 Der er 22 kommentarer og
1 løsning

CPR validering virker ikke

Jeg er ikke for skrap til javascript. Jeg har gennemgået og prøvet at integrere fra de spørsmål, der er oprettet om det her på eksperten. Udfra det sidst oprettede http://www.eksperten.dk/spm/243145, blev det accepterede resultatat af testsiden som nedenstående, efter mit samsurium. Jeg kan bare ikke få det til at validere andet end hvis der ikke er 10 cifre.

<html>
<head>
<title>CPRvalidering</title>

<script>

function validateCPR(cpr)
{
    // requires: cpr no - format: DDMMYYCCCC
    // CCCC: control digits

    if(cpr.length!=10)
        return false;

    var d = cpr.substr(0,6);
   
    if(!validateDate(d))
        return false;

    var w = 4*parseInt(cpr.substr(0,1),10) +3*parseInt(cpr.substr(1,1),10) +2*parseInt(cpr.substr(2,1),10) +7*parseInt(cpr.substr(3,1),10)
            +6*parseInt(cpr.substr(4,1),10) +5*parseInt(cpr.substr(5,1),10) +4*parseInt(cpr.substr(6,1),10) +3*parseInt(cpr.substr(7,1),10)
            +2*parseInt(cpr.substr(8,1),10) +parseInt(cpr.substr(9,1),10);

    if(w%11!=0)
        return false;

    return true;
}

function isValidCPR(cpr)
{
    if (!validateCPR(cpr)) {
      window.event.returnValue = false;
      window.event.cancelBubble = true;
      alert("CPR-Nummer ikke validt");
    }   
}

//alert(isValidCPR('0123456789'));

</script>
</head>

<body>
<form method="post" name="f"  onsubmit="isValidCPR(document.f.cpr.value)">
<input type="text" name="cpr">

<input type="submit" value="ok">
</form>
 
</body>
</html>
Avatar billede erikjacobsen Ekspert
28. april 2003 - 11:23 #1
Hvor har du validateDate ?
Avatar billede para7 Nybegynder
28. april 2003 - 11:29 #2
OK. Dem har jeg her. Jeg troede lige de var unødvendige. Men det virker ikke alligevel.

<html>
<head>
<title>CPRvalidering</title>

<script>

function isLeapYear(year)
{
    var result = false;
    var div4,div100,div400;

    div4 = year % 4;
    div100 = year % 100;
    div400 = year % 400;

    result = ((div4==0) & (div100!=0)) || ((div100==0) && (div400==0))
    return result;
}


function validateDate(d)
{
    if(d.length!=6)
        return false;

    var daysInMonth = Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
    var day = parseInt(d.substr(0,2),10);
    var month = parseInt(d.substr(2,2),10);
    var year = parseInt(d.substr(4,2),10);

    if(year < 0)
        return false;

    if(isLeapYear(year))
        daysInMOnth[2] = 29;

    if(month < 1 || month > 12)
        return false;

    if(day < 1 || day > daysInMonth[month])
        return false;

    return true;
}

function validateCPR(cpr)
{
    // requires: cpr no - format: DDMMYYCCCC
    // CCCC: control digits

    if(cpr.length!=10)
        return false;

    var d = cpr.substr(0,6);
   
    if(!validateDate(d))
        return false;

    var w = 4*parseInt(cpr.substr(0,1),10) +3*parseInt(cpr.substr(1,1),10) +2*parseInt(cpr.substr(2,1),10) +7*parseInt(cpr.substr(3,1),10)
            +6*parseInt(cpr.substr(4,1),10) +5*parseInt(cpr.substr(5,1),10) +4*parseInt(cpr.substr(6,1),10) +3*parseInt(cpr.substr(7,1),10)
            +2*parseInt(cpr.substr(8,1),10) +parseInt(cpr.substr(9,1),10);

    if(w%11!=0)
        return false;

    return true;
}

function isValidCPR(cpr)
{
    if (!validateCPR(cpr)) {
      window.event.returnValue = false;
      window.event.cancelBubble = true;
      alert("CPR-Nummer ikke validt");
    }   
}

//alert(isValidCPR('0123456789'));

</script>
</head>

<body>
<form method="post" name="f"  onsubmit="isValidCPR(document.f.cpr.value)">
<input type="text" name="cpr">

<input type="submit" value="ok">
</form>
 
</body>
</html>
Avatar billede brevkasserne Nybegynder
28. april 2003 - 11:30 #3
if(cpr.length!=10)
return false;

Her tjekker den om det indtastede er 10 tegn langt! Slet den linje!
Avatar billede para7 Nybegynder
28. april 2003 - 11:33 #4
Jeg har udkommenteret den nu ihvertfald. Stadig smutter ugyldige numre igennem nåleøjet.
Avatar billede para7 Nybegynder
28. april 2003 - 11:35 #5
Hov jeg skal nok ikke udkommentere return false; også ?
Har nu slettet som du sagde og det virker tilsyneladende! Jeg tester lige...
Avatar billede para7 Nybegynder
28. april 2003 - 11:37 #6
Nej, den vil ikke tage mit eget cprnr.
Avatar billede erikjacobsen Ekspert
28. april 2003 - 11:44 #7
<html>
<head>
<title>CPRvalidering</title>

<script>

function isLeapYear(year)
{
    var result = false;
    var div4,div100,div400;

    div4 = year % 4;
    div100 = year % 100;
    div400 = year % 400;

    result = ((div4==0) & (div100!=0)) || ((div100==0) && (div400==0))
    return result;
}


function validateDate(d)
{
    if(d.length!=6)
        return false;

    var daysInMonth = Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
    var day = parseInt(d.substr(0,2),10);
    var month = parseInt(d.substr(2,2),10);
    var year = parseInt(d.substr(4,2),10);

    if(year < 0)
        return false;

    if(isLeapYear(year))
        daysInMOnth[2] = 29;

    if(month < 1 || month > 12)
        return false;

    if(day < 1 || day > daysInMonth[month])
        return false;

    return true;
}

function validateCPR(cpr)
{
    // requires: cpr no - format: DDMMYYCCCC
    // CCCC: control digits

    if(cpr.length!=10)
        return false;

    var d = cpr.substr(0,6);
   
    if(!validateDate(d))
        return false;

    var w = 4*parseInt(cpr.substr(0,1),10) +3*parseInt(cpr.substr(1,1),10) +2*parseInt(cpr.substr(2,1),10) +7*parseInt(cpr.substr(3,1),10)
            +6*parseInt(cpr.substr(4,1),10) +5*parseInt(cpr.substr(5,1),10) +4*parseInt(cpr.substr(6,1),10) +3*parseInt(cpr.substr(7,1),10)
            +2*parseInt(cpr.substr(8,1),10) +parseInt(cpr.substr(9,1),10);

    if(w%11!=0)
        return false;

    return true;
}

function isValidCPR(cpr)
{
    if (!validateCPR(cpr)) {
      window.event.returnValue = false;
      window.event.cancelBubble = true;
      alert("CPR-Nummer ikke validt");
      return false;
    }   
    return true;
}

//alert(isValidCPR('0123456789'));

</script>
</head>

<body>
<form method="post" name="f"  onsubmit="return isValidCPR(document.f.cpr.value)">
<input type="text" name="cpr">

<input type="submit" value="ok">
</form>
 
</body>
</html>
Avatar billede para7 Nybegynder
28. april 2003 - 11:51 #8
erikjacobsen >
Har prøvet det du pastede ind. Virker ikke hos mig.
Avatar billede erikjacobsen Ekspert
28. april 2003 - 12:01 #9
Virker hos mig - tænk på at du bare får et tomt indtastningsfelt hvis
nummeret accepteres. Du får kun en alert hvis der er noget galt.
Avatar billede para7 Nybegynder
28. april 2003 - 13:00 #10
Jammen, det er nok en forbedring. Men jeg kan smide hvad som helst ind, bare datoformatet er iorden.
Avatar billede erikjacobsen Ekspert
28. april 2003 - 13:05 #11
Mener du at hvis du tager dit rigtige cpr-nr, XXXXXXYYYY og i stedet
skriver XXXXXXYYYZ, så siger den ok ? Sådan gør den ikke hos mig.
Avatar billede para7 Nybegynder
28. april 2003 - 13:15 #12
Ja det er korrekt, altså hvis jeg skriver 1009560122 eller 1009560123 eller 1009560124, som er tæt på mit rigtige nr. smutter den igennem.Jeg kan kan skrive hvad jeg vil efter datoformatet. - Og jeg har tømt cachen..
Avatar billede para7 Nybegynder
28. april 2003 - 13:27 #13
Hvad har du da rettet?
Avatar billede erikjacobsen Ekspert
28. april 2003 - 13:52 #14
Jeg har ikke lige det i et skudår... :) Du
skal rette linien til

      daysInMonth[2] = 29;

Men prøv det på http://1script.dk/eksperten/345658.html
Avatar billede para7 Nybegynder
28. april 2003 - 14:31 #15
erikjacobsen >
Jammen det det virker jo fint der. Og kilden er nu pastet ind i min Dreamweaver editor. Og så virker det her også. Jeg ved ikke, om den drømmer formeget nogen gange?? DW kan være rigtig slem, men også en stor hjælp.
Du skriver du har rettet linjen:
daysInMonth[2] = 29; ???
daysInMOnth[2] = 29; er linjen fra http://www.eksperten.dk/spm/243145
Send endelig et svar så du kan få veltjente point. Men jeg kunne godt tænke mig at vide, hvad der var galt.
Avatar billede para7 Nybegynder
28. april 2003 - 14:32 #16
Nåja, nu kan jeg se det. js er case sensitive.
Avatar billede erikjacobsen Ekspert
28. april 2003 - 14:36 #17
Flere ting. Ved validering med onsubmit skal du huske return et par steder
mere end du gjorde. Og så den her javascript-fejl.

Tak, jeg samler ikke på point.
Avatar billede para7 Nybegynder
28. april 2003 - 15:38 #18
Jeg siger mange tak for hjælpen så. Men kan du give mig et tip, hvor det er, der mangler return. Eller hvis jeg da skal bruge onSubmit. For jeg kan tilsyneladende kun bruge een ad gangen i toppen af min form: onSubmit="return EmailCheck(this.Email.value);return isValidCPR(this.PersonID.value);"
Avatar billede erikjacobsen Ekspert
28. april 2003 - 15:52 #19
Ja, du kan kun bruge én return der, men du kan lave en funktion, der så
gør flere ting. Men sammenlign ellers blot mit med dit.
Avatar billede para7 Nybegynder
28. april 2003 - 15:55 #20
Kan du sige hvordan jeg indsætter det i min (lidt rodedt udseende) DW valideringsfunktion:

function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' skal indeholde en e-mail adresse.\n';
      } else if (test!='R') { num = parseFloat(val);
        if (isNaN(val)) errors+='- '+nm+' må kun indeholde et nummer.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' er krævet.\n'; }
  } if (errors) alert('Følgende felter mangler at udfyldes:\n'+errors);
  document.MM_returnValue = (errors == '');
}
Avatar billede erikjacobsen Ekspert
28. april 2003 - 16:04 #21
DW - nej, tak, der står jeg af.
Avatar billede para7 Nybegynder
28. april 2003 - 16:09 #22
Ok, forståeligt. Jeg er også netop ved at forsøge at samle det hele i min egen paraply-funktion.
Avatar billede para7 Nybegynder
28. april 2003 - 18:12 #23
Tak igen til erikjacobsen. Jeg lukker og opretter nyt.
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