Avatar billede para7 Nybegynder
26. april 2003 - 19:46 Der er 3 kommentarer og
2 løsninger

CPR validering version 2 bør virke

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.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Untitled</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 ocp Nybegynder
26. april 2003 - 20:12 #1
Ikke så underligt. Du laver 2 fejl, hvoraf den sidste er den værste:

"window"-objektet tager returnValue og cancelBubble direkte uden "event":

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

...og så skal du fjerne din "alert(isValid(...))" - Den vil altid være forkert, da du benytter 0123456789 som CPRNR.
Avatar billede ocp Nybegynder
26. april 2003 - 20:14 #2
Ups... glem hvad jeg sagde angående "event"... det virker fint med event, men du skal stadig fjerne den alert-boks.
Avatar billede para7 Nybegynder
27. april 2003 - 08:45 #3
Tak ocp. Den er nu udkommenteret. Men scriptet tillader stadig forkerte cpr numre. Prøv selv.
En anden ting.
Avatar billede para7 Nybegynder
27. april 2003 - 08:47 #4
function isLeapYear(year) og function validateDate(d) skal vel bare smides væk?
Avatar billede para7 Nybegynder
28. april 2003 - 11:20 #5
Nå, her er helt øde. Jeg lukker og opretter et nyt:
http://www.eksperten.dk/spm/345658
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