Avatar billede hcthorsen Praktikant
13. september 2009 - 13:34 Der er 8 kommentarer og
1 løsning

Point til roenving

Har uden held prøvet at få dit script der beregner alder fra CPR-nummer til at virke (http://www.eksperten.dk/spm/525391). 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 sw_red_6 Nybegynder
14. september 2009 - 15:55 #1
Måske du skulle skrive det script som virker, så man ikke skal samle det selv ud fra det andet spørgsmål..
Avatar billede hcthorsen Praktikant
14. september 2009 - 21:32 #2
Hvis det er mig du henvender dig til, så er hele humlen jo, at jeg ikke kan samle scriptet så det virker... Det er det samlede script jeg efterlyser.
Avatar billede sw_red_6 Nybegynder
15. september 2009 - 08:51 #3
det står ellers du har fået det til at virker, men godt vil have ændret på nogle ting...
Det var det script du skulle vise her, så ville der nok være nogen som kunne hjælpe med at lave ændringerne..
Avatar billede hcthorsen Praktikant
15. september 2009 - 20:00 #4
Jeg skriver "har uden held prøvet at få dit script der beregner alder fra CPR-nummer til at virke", men lad nu det ligge. Jeg har sakset følgende script:


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)-1,+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.";
  }
}



Så skriver Roenving noget med

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") + ")";


Jeg kan ikke finde ud af at koble disse stumper sammen. Desuden ville jeg gerne have lavet 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 sw_red_6 Nybegynder
16. september 2009 - 09:20 #5
ahh så har jeg misforstået, beklager..

hvad er der galt med funktionen? regner den forkert?
Avatar billede sw_red_6 Nybegynder
17. september 2009 - 09:25 #6
skulle det her ikke kunne gøre det?

function cprCheck(cprflt, dateflt){
  var cpr = cprflt.value,match = false,c = cprflt.form.elements["cpr-status"],calcdate = dateflt;
  if(cpr.match(/[0-9]{6}\-?[0-9]{4}/) && calcdate.match(/[0-9]{6}/)){
    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)-1,+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";
      var aar = +cpr.substring(4,2);
      var maaned = +cpr.substring(2,2);
      var dag = +cpr.substring(0,2);
      var nu = new Date(+calcdate.substring(4,2),+calcdate.substring(2,2)-1,+calcdate.substring(0,2));
      var alder = nu.getFullYear() - (aar + (nu.getYear() > aar ? 2000 : 1900;));
      alder -= (maaned > nu.getMonth() + 1 || maaned == nu.getMonth() + 1 && dag > nu.getDate()) ? 1 : 0;

      c.value = "Gyldigt Cpr nr. (" + alder + " år; Køn: " + ((cpr.match(/[13579]$/))?"Mand":"Kvinde") + ")";
      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.";
  }
}
Avatar billede hcthorsen Praktikant
19. september 2009 - 11:26 #7
Beklager det sene svar, men jeg har ikke lige været online pga arbejde. Jeg kan ikke lige få det til at virke, men jeg har også store teoretiske huller hvad angår JS. Noget så simpelt som at kalde funktionen med 2 argumenter fra input-felter - hvordan gøres det. Før har jeg jo bare skrevet

<input type="text" name="cpr" onkeyup="cprCheck(this)">

Jeg er ikke helt sikker på hvad onkeyup="cprCheck(this) skal skiftes ud med.
Avatar billede hcthorsen Praktikant
19. september 2009 - 12:12 #8
Nu har jeg prøvet at rette lidt i scriptet. Jeg har lavet det så jeg fortsat kalder med onkeyup="cprCheck(this). Nu kommer der et resultat ud af det, men det er negativt (-99år eller lignende). Har ikke tid til at kigge mere på det nu.

function cprCheck(cprflt){
  var cpr = cprflt.value,match = false,c = cprflt.form.elements["cpr-status"];
  var calcdate;
  calcdate=document.form.dato.value;
  calcdate=calcdate.replace(/\-/g,"");
  if(cpr.match(/[0-9]{6}\-?[0-9]{4}/) && calcdate.match(/[0-9]{6}/)){
    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)-1,+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";
      var aar = +cpr.substring(4,2);
      var maaned = +cpr.substring(2,2);
      var dag = +cpr.substring(0,2);
      var nu = new Date(+calcdate.substring(4,2),+calcdate.substring(2,2)-1,+calcdate.substring(0,2));
      var alder = nu.getFullYear() - (aar + (nu.getYear() > aar ? 2000 : 1900));
      alder -= (maaned > nu.getMonth() + 1 || maaned == nu.getMonth() + 1 && dag > nu.getDate()) ? 1 : 0;
      c.value = "Gyldigt Cpr nr. (" + alder + " år; Køn: " + ((cpr.match(/[13579]$/))?"Mand":"Kvinde") + ")";
    }
  }else{
    c.disabled = true;
    c.style.color = "black";
    c.value = (cpr.length>0)?"Validerer ...":"<-- Indtast CPR nr.";
  }
}
Avatar billede hcthorsen Praktikant
12. oktober 2009 - 17:07 #9
Nå, fik det ikke til at virke. Lukker.
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