Avatar billede bodyguard Nybegynder
02. august 2004 - 04:16 Der er 36 kommentarer og
1 løsning

CPR validering, direkte uden submittering.

Hejsa

Jeg mangler et CPR validerings script, som validere direkte uden at man skal submitte.

Det jeg søger er en tekstboks, hvor man indtaster cpr nr fx. 0101010101

- Tjek om det er en gyldig dato? (findes datoen og ligger den før dags dato)
- Tjek  om det er et gyldigt cpr-nummer (jvf. algoritmen)
- om det er en mand eller dame, sidste tal svarer overens med om brugerens køn er mand = sidste tal ulige

Tekstboksen skal hedde "Cpr".

For at kunne se valideringen, skal resultatet vises i en tekstboks ved navn "cpr-status".

Er cpr nr forkert skal der stå "Ugyldigt Cpr nr."
Er cpr nr rigtigt skal der stå "Gyldigt Cpr nr. (KØN)"

Tekstboksen "cpr-status" står fra start med valuen "<-- Indtsat CPR nr." og boksen er DISABLED, og det er med en standart Grå skrift. Hvis det er muligt vil jeg gerne have at skrift farven henholdsvis er grøn hvis Gyldigt, og rød hvis Ugyldigt.

Jeg ved godt at dette er svært, og jeg tvivler på om der overhovedet er nogen som KAN lave dette...

Jeg håber der er en som kan, giv mig lidt respons :]

Mvh.
Mark Zweidorff
Avatar billede roenving Novice
02. august 2004 - 04:29 #1
Svært er ikke lige den rette betegnelse, for algoritmen er jo simpel, men har du overvejet problemer med at sende den slags over en almindelig internet-forbindelse ?-)

-- da denne kode jo bruges i en hel masse sammenhænge til at identificere identitet er det simpelthen beskidt at bede folk om den slags, hvis ikke der bruges en SSL-opkobling (https://)
Avatar billede EIHP Juniormester
02. august 2004 - 04:30 #2
Disse scripts findes alle vegne på nettet..endda på pc-computer's dvd-rom.. :S
Avatar billede bodyguard Nybegynder
02. august 2004 - 04:40 #3
Det er til et "Skade rapport" system, som jeg prøver at lave. Man indsatser diverse informationer som så bliver printet, på den måde kan ambulance folkene på skrift få hendelses forløb, skader, behandling, samt diverse informationer som er vigtige, så man sparre livsvigtige minutter.

Dette skal heller ikke bruges på en public server, men istedet på et Intranet UDEN internet forbindelse. Informationerne bliver printet i to forskellige opsætninger og så bliver informationerne slettet, eller de bliver ikke gemt...!

Scriptet vil jeg gerne have lavet af en da der er nogle små ting som at få vist valideringen i et tekstfeldt o.l.

Dette skal nemlig passe ind.
Avatar billede roenving Novice
02. august 2004 - 04:55 #4
Det er lidt svært at validere, om det er en dato, som er før idag, da der jo er en masse gyldige cpr-numre fra forrige århundrede ...

-- og når årstallet er angivet med to cifre vil det altid være beregnet til 19 foran, har du også en algoritme til det ?-)

Men umiddelbart ser dette ud til at virke:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<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 cprCheck(flt){
  var cpr = flt.value,match = false,c = document.getElementById('cprcheck');
  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)match = true;
  var dag = new Date(+cpr.substring(4,2),+cpr.substring(2,2),+cpr.substring(0,2));
  if(dag.getTime() > new Date().getTime() || !match){
    c.style.color = "red";
    c.innerHTML = "Ugyldigt Cpr nr.";
  }else{
    c.style.color = "green";
    c.innerHTML = "Gyldigt Cpr nr. (Køn: " + ((cpr.match(/[13579]$/))?"Mand":"Kvinde") + ")";
  }
  }else{
    c.style.color = "red";
    c.innerHTML = "Ugyldigt Cpr nr.";
  }
}
</script>
</head>
<body>
<form name="form1" method="post" onSubmit="">
  <input type="text" name="cpr" onkeyup="cprCheck(this)">&nbsp;<span id="cprcheck" style="color:#aaa;">&lt;-- Indtast CPR nr.</span><br>
  <input type="submit" name="Submit" value="Submit">
</form>
</body>
</html>
Avatar billede bodyguard Nybegynder
02. august 2004 - 04:59 #5
oki, ser godt ud, så mangler der jo bare en lille finesse at status skal vises i en anden tekstboks med navn "cpr-status", kan du det?
Avatar billede roenving Novice
02. august 2004 - 05:06 #6
Jeg brugte med vilje en span, fordi der jo alligevel under ingen omstaændigheder skal kunne redigeres ?-)
Avatar billede bodyguard Nybegynder
02. august 2004 - 05:09 #7
to ting til, kan du lave sådan så at der står validrer... når man indtaster og først står Ugyldigt/gyldigt Cpr Nr. når man har indtastet de 10 cifre ?

Man kan jo heller ikke redigere i inputtet da der er DISABLED, på.
Avatar billede roenving Novice
02. august 2004 - 05:16 #8
-- men der er vel ikke en grund til at bruge et input-felt ?-)

-- når html-standarden siden 1998 har tilbudt et alternativ, som tillader noget andet ...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<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 cprCheck(flt){
  var cpr = flt.value,match = false,c = document.getElementById('cprcheck');
  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)match = true;
    var dag = new Date(+cpr.substring(4,2),+cpr.substring(2,2),+cpr.substring(0,2));
    if(dag.getTime() > new Date().getTime() || !match){
      c.style.color = "red";
      c.innerHTML = "Ugyldigt Cpr nr.";
    }else{
      c.style.color = "green";
      c.innerHTML = "Gyldigt Cpr nr. (Køn: " + ((cpr.match(/[13579]$/))?"Mand":"Kvinde") + ")";
    }
  }else{
    c.style.color = "#aaa";
    c.innerHTML = (cpr.length>0)?"Validerer ...":"&lt;-- Indtast CPR nr.";
  }
}
</script>
</head>
<body>
<form name="form1" method="post" onSubmit="">
  <input type="text" name="cpr" onkeyup="cprCheck(this)">&nbsp;<span id="cprcheck" style="color:#aaa;">&lt;-- Indtast CPR nr.</span><br>
  <input type="submit" name="Submit" value="Submit">
</form>
</body>
</html>
Avatar billede bodyguard Nybegynder
02. august 2004 - 05:18 #9
Problematikkern er bla. at jeg ikke kan få indholdet med af en span, og jeg vil helst bla layout mæssigt have det i en input...
Avatar billede roenving Novice
02. august 2004 - 05:22 #10
Layout ?-)

-- skal du bruge det i en validering er det alligevel bedst at lave den serverside, da der er utallige måder at snyde vha. f.eks. javascript i adresselinjen ...

-- og selvfølgelig stoler du meget på dine brugere, hvis du laver det i et intranet, men eh ...
Avatar billede bodyguard Nybegynder
02. august 2004 - 05:28 #11
der er ikke nogen adresse linie... jeg bruger en browser uden muligheden for adresse linie...

Envidre har jeg fjernet muligheden for at bruge diverse short-keys ...

så er du nu ikke bare venlig at lave det så det kommer ud i en input...

desuden er det ikke ligefrem nørder eller folk med den store forstand på computer der skal bruge dette...
Avatar billede roenving Novice
02. august 2004 - 05:36 #12
Virker det da ikke, hvis man ikke kan bruge en computer på avancerede måder ?-)
Avatar billede roenving Novice
02. august 2004 - 05:36 #13
-- nå skal lige sove lidt ...
Avatar billede bodyguard Nybegynder
02. august 2004 - 05:38 #14
Hmmmm er det fordi du IKKE kan lave dette?
Avatar billede roenving Novice
02. august 2004 - 05:39 #15
Nu er den faktisk en del lettere at lave, hvis man kan bruge referencen til en form og et felt ...
Avatar billede bodyguard Nybegynder
02. august 2004 - 05:42 #16
jae, men jeg har altså brug for at få det i et input, kan du lave et?
Avatar billede arne_v Ekspert
02. august 2004 - 07:04 #17
Man kan faktisk beregne årstaller præcist udfra første ciffer af de sidste 4 cifre.

0-3 => 1900-1999
4,9 => 1937-2036
5-8 => 1858-1899,2000-2036
Avatar billede bodyguard Nybegynder
02. august 2004 - 07:09 #18
øhhh, arne v kan du lave sådan et script jeg efterlyser ?
Avatar billede arne_v Ekspert
02. august 2004 - 07:26 #19
Mig & JavaScript ? Nix !

Vent til roenving står op igen.
Avatar billede bodyguard Nybegynder
02. august 2004 - 07:28 #20
oki
Avatar billede Slettet bruger
02. august 2004 - 10:05 #21
Jeg er ikke meget for at snuppe det ud af hænderne på roenving, men det lyder, som om det haster:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<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 cprCheck(flt){
  var cpr = flt.value,match = false,c = flt.form.elements["cpr-status"];
  if(cpr.match(/[0-9]{6}\-?[0-9]{4}/)){
    c.disabled = false;
    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)match = true;
    var dag = new Date(+cpr.substring(4,2),+cpr.substring(2,2),+cpr.substring(0,2));
    if(dag.getTime() > new Date().getTime() || !match){
      c.style.color = "red";
      c.value = "Ugyldigt Cpr nr.";
    }else{
      c.style.color = "green";
      c.value = "Gyldigt Cpr nr. (Køn: " + ((cpr.match(/[13579]$/))?"Mand":"Kvinde") + ")";
    }
  }else{
    c.disabled = true;
    c.style.color = "black";
    c.value = (cpr.length>0)?"Validerer ...":"<-- Indtast CPR nr.";
  }
}
</script>
</head>
<body>
<form name="form1" method="post" onSubmit="">
  <input type="text" name="cpr" onkeyup="cprCheck(this)">&nbsp;<input type="text" name="cpr-status" size="25" value="&lt;-- Indtast CPR nr." disabled><br>
  <input type="submit" name="Submit" value="Submit">
</form>
</body>
</html>

Jeg skal ikke have point.
Avatar billede bodyguard Nybegynder
02. august 2004 - 10:14 #22
Det er lige det jeg har søgt :D

TUSINDE TAK!!!

nu er jeg ikke den store haj til dette, så kan du ikke generere et cpr nr til en kvinde...
Avatar billede Slettet bruger
02. august 2004 - 16:02 #23
Prøv: 1209651412
Avatar billede roenving Novice
02. august 2004 - 16:17 #24
-- og en hel stribe:

1209651404

1209651552
-- 44
-- 36
-- 28

-- som du kan se, vil et gyldigt cpr-nummer have en søster/bror, hvis man ved at lægge 8 til eller trække 8 fra ændrer præcis de to sidste cifre
Avatar billede bodyguard Nybegynder
02. august 2004 - 16:17 #25
oki
Avatar billede roenving Novice
02. august 2004 - 16:20 #26
-- og en lille fejl er sluppet igennem:

var dag = new Date(+cpr.substring(4,2),+cpr.substring(2,2)-1,+cpr.substring(0,2));
Avatar billede bodyguard Nybegynder
26. august 2004 - 21:55 #27
Jeg tænkte om du vil have points?
Avatar billede roenving Novice
27. august 2004 - 13:48 #28
Jamen, velbekomme '-)
Avatar billede bodyguard Nybegynder
27. august 2004 - 15:08 #29
Nåe ja, mange tak for din indsats :j
Avatar billede roenving Novice
28. august 2004 - 13:16 #30
-- og tak for point ;~}
Avatar billede bodyguard Nybegynder
28. august 2004 - 14:53 #31
så lidt skulle det være en anden gang ;-)

evt mit spørgsmål om at vedhæfte billed fra kontakt form ... ;)
Avatar billede rashid Praktikant
03. juni 2009 - 14:11 #32
hej Roeving
kan man udvide denne funktion til at beregne personens alder også  ??
Avatar billede roenving Novice
03. juni 2009 - 16:15 #33
Uden problemer, husk bare at gøre det laaangsomt, forstået på den måde, at du først fratrækker fødselsåret fra den aktuelle datos årstal, derefter tester om måned er indtruffet og evt. om dagen er passeret !-)

Efter stedet hvor streger trækkes ud:

var aar = +cpr.substring(4,2);
var maaned = +cpr.substring(2,2);
var dag = +cpr.substring(0,2);
var nu = new Date();
var alder = nu.getFullYear() - (aar + (nu.getYear() > aar ? 2000 : 1900;));
alder -= (maaned > nu.getMonth() + 1 || maaned == nu.getMonth() + 1 && dag > nu.getDate()) ? 1 : 0;

-- og senere indsætte det, f.eks.

c.value = "Gyldigt Cpr nr. (" + alder + " år; Køn: " + ((cpr.match(/[13579]$/))?"Mand":"Kvinde") + ")";
Avatar billede hcthorsen Praktikant
12. september 2009 - 13:13 #34
Roenving, har uden held prøvet at få dit script der beregner alder fra CPR-nummer til at virke. Kan du evt. vise hele scriptet i sin helhed? Havde du mulighed for at lave en rettelse så alderen ikke blev beregnet ud fra dagen i dag, men ud fra indholde af et input-felt i formatet dd-mm-yyyy.
Avatar billede johnstigers Seniormester
13. september 2009 - 14:39 #35
Avatar billede hcthorsen Praktikant
13. september 2009 - 14:47 #36
Øh, hvad? Er du ked af at jeg har to åbne spørgsmål om det samme? Jeg vil bare gerne have fat i roenvig, for han har lavet det jeg skal bruge.
Avatar billede johnstigers Seniormester
13. september 2009 - 14:52 #37
Han kan jo ikke se du har oprettet et sprøgsmål, vel?
Jeg smed link så det var nemt for ham at se dit spørgsmål + en hjælp til dig - og stop med at være paranoid.
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