Avatar billede stig69 Nybegynder
16. juni 2004 - 12:13 Der er 21 kommentarer og
1 løsning

Validering af CPR-nummer

Er der en der ligger inde med et lille stykke javascript der kan validere om man har indtastet korrekt cpr-nummer?

Det skal bruges i forbindelse med følgende:
CPR-nummer:<input type="text" name="cpr" maxlength="11" size="20"/>
Om det er med eller uden bindestreg gør ikke så meget

Stig
16. juni 2004 - 12:19 #1
Avatar billede stig69 Nybegynder
16. juni 2004 - 12:22 #2
erikjuul--> Jeg har været inde og kigge på din. fandt den på google, men
jeg tænkte mere på et færdig script, som kunne indsættes
Avatar billede stig69 Nybegynder
16. juni 2004 - 12:24 #3
Altså i stil med < ...onblur="if(!this.value.match(/^\d*$/)){alert('Feltet må kun indeholde tal');this.focus();}">. Det kan godt være at jeg bare skal bruge denne...
Avatar billede skovenborg Nybegynder
16. juni 2004 - 12:35 #4
måske:
onblur="if(!this.value.match(/^[\d]{6}\-[\d]{4}$/) {alert('Indtast et ordentligt cpr-nummer;this.focus();}
Avatar billede skovenborg Nybegynder
16. juni 2004 - 12:41 #5
ud over at der skulle stå:
onblur="if(!this.value.match(/^\d{6}\-\d{4}$/)) {alert('Indtast et ordentligt cpr-nummer');this.focus();}"
Avatar billede roenving Novice
16. juni 2004 - 12:41 #6
Skal den validere at det er et gyldigt cpr-nummer ?-)

Altså lave modulus11-testen (og måske også validere at datoen er gyldig ?o]
Avatar billede stig69 Nybegynder
16. juni 2004 - 12:41 #7
skovenborg--> har du checket den? Jeg kan ikke lige få den til at virke, også selvom jeg modificerer den lidt... onblur="if(!this.value.match(/^[\d]{6}\-[\d]{4}$/) {alert('Indtast et ordentligt cpr-nummer');this.focus();}
Avatar billede stig69 Nybegynder
16. juni 2004 - 12:43 #8
roenving-->Hvis du har en liggende der gør det, så ville det være lækkert :-), men det er ikke nødvendigt, cpr-nummeret bliver holdt op mod en database. Men nu tror jeg godt jeg vil have bindestreg efter skovenborg introducerede det
Avatar billede skovenborg Nybegynder
16. juni 2004 - 12:46 #9
tja, du kan se den her, som jeg testede med (kan være jeg glemte at poste noget af koden ;-)
<input type="text" onblur="if(!this.value.match(/^\d{6}\-\d{4}$/)) {alert('Indtast et ordentligt cpr-nummer');this.focus();}" />
Avatar billede roenving Novice
16. juni 2004 - 12:48 #10
Og et enkelt tegn mere, så det er ligegyldigt om bindestregen er der:

<input type="text" onblur="if(!this.value.match(/^\d{6}\-?\d{4}$/)) {alert('Indtast et ordentligt cpr-nummer');this.focus();}" />
Avatar billede stig69 Nybegynder
16. juni 2004 - 12:52 #11
roenving--> Den var smart, men jeg tror det bliver for omstændigt, så jeg tror bare at jeg bruger den uden bindestreg og så kun 10 tegn
Avatar billede stig69 Nybegynder
16. juni 2004 - 12:52 #12
Kan I ikke begge to ligge nogle svar ind, så får I lidt hver
Avatar billede skovenborg Nybegynder
16. juni 2004 - 12:55 #13
joda ;-)
Avatar billede stig69 Nybegynder
16. juni 2004 - 12:59 #14
Også dig roenving
Avatar billede roenving Novice
16. juni 2004 - 13:05 #15
Det må vist være skovenborgs omgang !-)
Avatar billede stig69 Nybegynder
16. juni 2004 - 13:12 #16
ok, det afgør I selv
Avatar billede skovenborg Nybegynder
16. juni 2004 - 13:13 #17
tjaa, okay - så tak for points :-)

roenving >> Tænkte lige hvad der er for noget modulus11 test du talte om - har ikke umiddelbart hørt om den før...
Avatar billede roenving Novice
16. juni 2004 - 14:09 #18
Indtil videre er de danske personnumre udstyret med en test-mulighed på, om det sidste ciffer er gyldigt, da det skal være 11-resten af en sum af produkter af de enkelte cifre med en bestemt talrække:

432765432

-- hvis f.eks. et cpr-nr. er 111191-1114 testes det ved at gange de første 9 cifre med ovenstående cifre enkeltvis og summere:

1*4 + 1*3 + 1*2 + 1*7 + 9*6 + 1*5 + 1*4 + 1*3 + 1*2 = 84

Så findes nærmeste tal over, som 11 går op i (her 88) og de to trækkes fra hinanden, og differencen skulle så være det sidste ciffer !-)

I praksis gør man det selvfølgelig på den måde at man udvider talrækken med et 1-tal og gør:

1*4 + 1*3 + 1*2 + 1*7 + 9*6 + 1*5 + 1*4 + 1*3 + 1*2 + 4*1 = 88

-- som så testes for at 11 går op i det, at 88 modulus 11 er 0 !-)

-- der er dog lavet forberedelser til udvidelse af nummer-systemet, så vi risikerer at denne checkmulighed forsvinder, da enkelte datoer er kraftigt belastet og kun har ganske enkelte gyldige numre tilbage, hvis modulus 11-testen skal virke !o]
Avatar billede stig69 Nybegynder
16. juni 2004 - 16:21 #19
Hvis I følger erikjuul anvisning i øverste linie, har han et exel regneark liggende, hvor man kan teste om et cpr-nummer er gyldig.
Avatar billede roenving Novice
16. juni 2004 - 17:25 #20
-- og det regneark gør det samme, som det javascript, jeg har liggende:

<script language="JavaScript" type="text/javascript">
function cprTjeck(frm){
    var cpr = frm.cpr.value
    if(cpr.match(/[0-9]{6}\-[0-9]{4}/)){
        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)return true;
        }
    alert("ikke valid CPR");
    return false;
    }
</script>
Avatar billede Slettet bruger
17. juni 2004 - 12:45 #21
Bare for en ordens skyld, bør du lige være opmærksom på at personnummer regnes som en "følsom" oplysning, og der er derfor regler om, hvem der må registrere oplysninger på personnumre, og hvornår og hvorfor.

Se bl.a. http://www.datatilsynet.dk/lovgivning/personoplysninger/afsnit2.asp §11 stk. 2
Avatar billede stig69 Nybegynder
17. juni 2004 - 12:48 #22
sandbox--> Tak for det. Jeg havde det på fornemmelsen
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