Avatar billede dkkarpen Nybegynder
05. august 2002 - 17:06 Der er 31 kommentarer og
2 løsninger

CPR validering

Jeg fandt den her:

<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)
{
    return validateCPR(cpr);
}

alert(isValidCPR('0123456789'));


</script>

Hvordan anvender jeg den i min form? Jeg kan se der laves en test sidst i koden. Skal jeg i mit form tag skrive noget med onsubmit="isValidCPR(inputfeltnavn);"?
Avatar billede kimblim Nybegynder
06. august 2002 - 11:39 #1
ja, det lader til at være nøjagtig hvad du skal gøre.. har du prøvet det?
Avatar billede dkkarpen Nybegynder
06. august 2002 - 11:47 #2
<form method="post" action="mf.asp?mode=process" onsubmit="isValidCPR(cpr)">
<input type="text" name="cpr">

<input type="submit" value="ok">
</form>
Avatar billede dkkarpen Nybegynder
06. august 2002 - 11:47 #3
Det virker ikke...
Avatar billede nikolajdu Nybegynder
06. august 2002 - 11:50 #4
er rent skud :

onsubmit="return isValidCPR(this.form.cpr.value)"
Avatar billede kimblim Nybegynder
06. august 2002 - 11:51 #5
nej, det er fordi du ikke refererer rigtigt til den... prøv onsubmit="isValidCPR(document.forms.formnavn.cpr);"
Avatar billede dkkarpen Nybegynder
06. august 2002 - 11:52 #6
this.form.cpr er null eller ikkeet objekt
Avatar billede dkkarpen Nybegynder
06. august 2002 - 11:56 #7
Ingen af løsningerne virker.
Avatar billede kimblim Nybegynder
06. august 2002 - 11:57 #8
husk at give formen et navn og så referere til den i (document.forms.FORMNAVN.cpr)
Avatar billede nikolajdu Nybegynder
06. august 2002 - 11:57 #9
<form name=" f" method="post" action="mf.asp?mode=process" onsubmit="isValidCPR(document.f.cpr.value)">
Avatar billede nikolajdu Nybegynder
06. august 2002 - 11:58 #10
kimblim - Ikke kalde den "forms".

Forms er i forvejen et objekt - document.forms[0] / document.forms['minform']
Avatar billede dkkarpen Nybegynder
06. august 2002 - 12:05 #11
Funktionen bliver ikke aktiveret.
Avatar billede nikolajdu Nybegynder
06. august 2002 - 12:07 #12
den virker fint hos mig :

<!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)
{
    return validateCPR(cpr);
}

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>


/Nikolaj
Avatar billede dkkarpen Nybegynder
06. august 2002 - 12:10 #13
Muligvis fordi du ikke har fjernet linien "alert(isValidCPR('0123456789'));" ;-)
Avatar billede nikolajdu Nybegynder
06. august 2002 - 12:12 #14
Nej det er helt ligegyldigt :))

alerten er kun for at teste - Indtaster du dit eget cpr-nr i der, så vil den give true - Anyway, så bare fjern linien.
Avatar billede dkkarpen Nybegynder
06. august 2002 - 12:14 #15
Nej den giver hverken true eller false. Har du prøvet?
Avatar billede nikolajdu Nybegynder
06. august 2002 - 12:15 #16
Som du kan se så har jeg prøvet og den jeg har postet virker altså fint - både med og uden den alert()
Avatar billede dkkarpen Nybegynder
06. august 2002 - 12:40 #17
Når jeg bruger din kode og submittter formen sker der intet. Jeg kan skrive hvad som helst i feltet uden at det kontrolleres.
Avatar billede dkkarpen Nybegynder
06. august 2002 - 12:58 #18
Ok nu har jeg fattet det. Jeg får en værdi. Enten true eller false. Men der mangler dda noget til at stoppe brugeren. En promt som i normal validering. Noget bud?
Avatar billede dkkarpen Nybegynder
06. august 2002 - 13:00 #19
Jeg kan godt skrive return alert(validateCPR(cpr)); men formen submittes jo alligevel.
Avatar billede atoft Nybegynder
07. august 2002 - 09:29 #20
I isValidCPR(cpr) kan du lave lave en event.cancelBuble = true eller en returnValue = false. Det vil bevirke, at siden ikke submittes.
Avatar billede dkkarpen Nybegynder
07. august 2002 - 09:31 #21
Det må du gerne vise tak. Det er trods alt 100 points...
Avatar billede atoft Nybegynder
07. august 2002 - 09:38 #22
Følgende funktion

function isValidCPR(cpr)
{
    return validateCPR(cpr);
}

omskrives til

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

Så skulle siden ikke submittes mere.
Avatar billede atoft Nybegynder
07. august 2002 - 09:39 #23
Ups det skal ikke være
if (validateCPR(cpr)) {

men

if (!validateCPR(cpr)) {
Avatar billede dkkarpen Nybegynder
07. august 2002 - 09:45 #24
Formen submittes stadigvæk.
Avatar billede atoft Nybegynder
07. august 2002 - 09:53 #25
swipser

returnValue = false;

rettes til

window.event.returnValue = false;
Avatar billede dkkarpen Nybegynder
07. august 2002 - 09:56 #26
Perfekt
Avatar billede dkkarpen Nybegynder
07. august 2002 - 09:56 #27
nikolajdu. Laver du ikke også et svar?
Avatar billede atoft Nybegynder
07. august 2002 - 09:58 #28
Jeg har lavet et svar, så hit med de 100 slag!!!
Avatar billede dkkarpen Nybegynder
07. august 2002 - 09:58 #29
Ja men i deles vel om den fulde løsning.
Avatar billede atoft Nybegynder
07. august 2002 - 10:03 #30
Jeg er da den eneste, som har kommet med et svar. Hvis "nikolajdu" ville have point kunne han jo bare have sendt det som svar - ikke !
Avatar billede dkkarpen Nybegynder
07. august 2002 - 10:04 #31
Det har han gjort men jeg afviste det
Avatar billede nikolajdu Nybegynder
07. august 2002 - 14:35 #32
hvis du mener det sådan så :)
Avatar billede atoft Nybegynder
07. august 2002 - 15:02 #33
Undskyld jeg overså hans svar!
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