Avatar billede loudrup Nybegynder
05. maj 2004 - 09:45 Der er 20 kommentarer og
1 løsning

modulus 11 på cprnr. men et problem hvis man er fra Færøerne

Jeg er rent ind i et temmelig stort problem. Jeg har validering på min formular på cprnr. som også fungerer fint, men jeg har ikke taget højde for at nogle af dem som skal have mulighed for at bruge denne formular er fra Færøerne, og de har kun 3 cifre til sidst i deres cprnr. Hvad kan jeg gøre for at de også kan melde sig til? Skal jeg måske oprette et felt som skal krydses af hvis man er fra Færøerne, og så have en speciel modolus 11 for dem? Er der nogen der kan hjælpe mig med dette problem, samt koden på en sådan modulus 11. Kan man lave en modulus 11 der dækker begge?
Avatar billede loudrup Nybegynder
05. maj 2004 - 09:46 #1
Jeg glemte lige at vedhæfte min kode:

function valider(f){

    var cpr = f.cprnr.value,cprok=false;
    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)cprok=true;
        }
if(!cprok){
    alert("ikke valid CPR");
    f.cprnr.select();
    f.cprnr.focus();
    return false;
}
Avatar billede olebole Juniormester
05. maj 2004 - 14:06 #2
<ole>

Det kræver, vi ved, hvad de forskellige tal betyder på Færøerne.

Når et personnummer (med fire ciffre i løbenummeret) tildeles, er de seks første ciffre naturligvis fødedagen.
De tre første i løbenummeret er det nummer, man er registreret født som på den pågældende dag.

Det sidste ciffer er et 'check-ciffer', der beregnes udfra modulus 11. Det skal dog også følge kønnet: et lige tal for en kvinde og et ulige for en mand.
Passer tallet ikke til kønnet, rettes sidste tal med én (jeg husker ikke, om det er op eller ned) ... det synes jeg nu ikke, jeg ser afspejlet i din egen funktion.

/mvh
</bole>
Avatar billede roenving Novice
05. maj 2004 - 17:37 #3
>>ole

Det er ikke rigtigt (indtil videre i hvert fald !-)

Man er begyndt at tale om, at modulus11-checket ikke længere skal være et must, men indtil videre er den måde man tildeler cpr-numre den, at man for hver dag beregner hvilke cpr-numre, som dækker over gyldige numre med checket, og så sorterer dem i to bunker: de lige i den ene og de ulige i den anden, og så deles de ud derfra !-)

Der er for et par år siden lavet et notat fra indenrigsministreriet, som skitserer hvordan man skaffer sig mange gange så mange cpr-numre, da vi med afhængigheden af modulus11-checket maximum har 800-900 numre til rådighed pr. dato ...

-- og selv om det svarer til et gennemsnitligt fødselstal, som er mindst 4 gange så stort som det vi i Danmark har, er der i visse sammenhænge konstateret problemer med den første eller sidste i måneden, da fødselsdatoer ikke i alle egne af verdenen optegnes lige minutiøst !o]

-- og jeg fik iøvrigt linket i en tråd herinde ...
Avatar billede loudrup Nybegynder
06. maj 2004 - 08:52 #4
jeg ved ikke hvad de forskellige tal betyder på Færøerne. Hvordan kan jeg finde ud af det? Jeg skulle nemlig meget hurtigt finde en løsning. Tilmeldinger er allerede begyndt på den side som jeg har
Avatar billede roenving Novice
07. maj 2004 - 18:34 #5
Så bliver du jo nødt til at overse de færøske cpr-numre:

    var cpr = f.cprnr.value;
    var cprok = (!cpr.match(/[0-9]{6}\-[0-9]{4}/)&&cpr.match(/[0-9]{6}\-[0-9]{3}/));
    if(cpr.match(/[0-9]{6}\-[0-9]{4}/)){
Avatar billede olebole Juniormester
07. maj 2004 - 19:55 #6
roenving >> Den hat æder jeg øjeblikkelig - med sennep, ketchup og kage til! Det havde jeg tydeligvis helt misforstået  :)
  http://www.cpr.dk/publikationer/pnr-notat%20ny%20skrift.htm

Et lille kuriosum (undskylder for spam): Det eneste, der adskiller min fars og mit fulde personnummer er årstallet ... hvilket har givet materiale til talrige apparte forviklingsfarcer i offentligt regi  :D
Selvom min søn blev født på den _samme_ dag i _samme_ måned (...!), fik han dog ikke samme løbenummer. Men til en trøst er hans søster så født på sin mors fødselsdag!
Goddamned weird, freakin' family ...!!!  :)
Avatar billede roenving Novice
07. maj 2004 - 20:30 #7
>>olebole

-- så kunne et gæt være, at din far er præcis 22 år ældre end dig !-)

Der skal nemlig være samme difference for begge cifre i årstallet, for at kontrol-cifferet kan du !o]

11 er usandsynlig, 33 en mulighed, højere multipla af 11 en teoretisk mulighed ...
Avatar billede olebole Juniormester
07. maj 2004 - 22:22 #8
33 er rigtigt - og min søn blev født et år for sent til, der var en mulighed for endnu en gentagelse ... eller 10 år for tidligt, om du vil  :)
Avatar billede loudrup Nybegynder
10. maj 2004 - 08:01 #9
ok roenving, hvordan skal jeg så lave hele koden? Jeg mener, modolus 11 på danske cpr numre og den kode som du har skrevet på kursister fra Færøerne? Kan du vise mig hvordan jeg kombinerer de to.
Avatar billede roenving Novice
10. maj 2004 - 08:13 #10
Du dskifter to af dine linjer med de tre fra 07/05-2004 18:34:28

function valider(f){

    var cpr = f.cprnr.value;
    var cprok = (!cpr.match(/[0-9]{6}\-[0-9]{4}/)&&cpr.match(/[0-9]{6}\-[0-9]{3}/));
    if(cpr.match(/[0-9]{6}\-[0-9]{4}/)){
        cpr = cpr.replace(/\-/g,"");
Avatar billede loudrup Nybegynder
10. maj 2004 - 09:42 #11
Det vil sige at

var cpr = f.cprnr.value,cprok=false;
    if(cpr.match(/[0-9]{6}\-[0-9]{4}/)){

udskiftes med

var cpr = f.cprnr.value;
    var cprok = (!cpr.match(/[0-9]{6}\-[0-9]{4}/)&&cpr.match(/[0-9]{6}\-[0-9]{3}/));
    if(cpr.match(/[0-9]{6}\-[0-9]{4}/)){

er det korrekt?

Hvordan kommer det så til at virke i praksis? Virker modulus 11 stadig på danske cprnr.?
Avatar billede loudrup Nybegynder
10. maj 2004 - 11:14 #12
jeg har nu fundet ud af at modulus 11 virker på færøerske cpr numre. Dvs at at der må kunne lægges en validering ind på denne også, bare på 3 cifre i stedet for 4.Kan i hjælpe mig med det. Det skulle nemlig gerne kunne virke på begge. Jeg har indsat den kode som roenving har givet mig, og det virker også, men den godkender alt der kun har 3 cifre, og det er jo ikke meningen.
Avatar billede roenving Novice
10. maj 2004 - 18:14 #13
Ved du hvordan den modulus-beregning er ?-)

Når du nu har fået en bekræftigelse på, at den er der må du også kunne finde et link til metoden !-)
Avatar billede loudrup Nybegynder
15. maj 2004 - 11:39 #14
ja, jeg kan se at min sidste kommentar er væk. Det var dog en skam. Men jeg prøver igen.
Udregning af modulus 11 på færørsk cprnr:
Eksempel:

040567-87

Nu skal det sidst ciffer findes.

cprnr:  0  4    0    5  6  7    -  8  7

gange    3  2    7    6  5  4        3  2

=      3 +  8 +  0 + 30+ 30 + 28  +  24 + 14 =137

=      137/11 = 12 og en rest på 5

rest 5 trækkes fra 11 som giver 6 hvilket er det sidste ciffer.

Det er denne validering som jeg skal have til at virke, sammen med valideringen af danske cprnr. Det vil sige at der skal checkes for begge. Kan i hjælpe mig med at lave denne validering?
Avatar billede roenving Novice
15. maj 2004 - 19:58 #15
Så må det blive sådan noget som:

<script language="javascript" type="text/javascript">
function valider(f){
  var cpr = f.value,cprok=false;
  if(cpr.match(/[0-9]{6}\-[0-9]{3,4}/)){
    cpr = cpr.replace(/\-/g,"");
    l = cpr.length;
    var chk = 0;
    for(i=l-1;i>-1;i--){
      chk += (+cpr.charAt(i))*((i>l-8)?(l-i):(l-6-i));
    }
    if(chk%11==0)cprok=true;
  }
  if(!cprok){
    alert("ikke valid CPR");
    f.select();
    f.focus();
    return false;
  }
}
</script>
Avatar billede loudrup Nybegynder
16. maj 2004 - 10:58 #16
er dette en kode der checker for både danske og færøerske cpr numre? Jeg har nemlig prøvet at udskifte den gamle validering med denne, men den siger at der er fejl på siden.
Avatar billede roenving Novice
16. maj 2004 - 14:36 #17
Jeg har testet den, så der må være et eller andet ...
Avatar billede roenving Novice
16. maj 2004 - 15:09 #18
Argh ...

Jeg har selvfølgelig testet, men jeg har jo også lavet kaldet direkte til feltet og ikke til formen !-)

<script language="javascript" type="text/javascript">
function valider(f){
  var cpr = f.cprnr.value,cprok=false;
  if(cpr.match(/[0-9]{6}\-[0-9]{3,4}/)){
    cpr = cpr.replace(/\-/g,"");
    l = cpr.length;
    var chk = 0;
    for(i=l-1;i>-1;i--){
      chk += (+cpr.charAt(i))*((i>l-8)?(l-i):(l-6-i));
    }
    if(chk%11==0)cprok=true;
  }
  if(!cprok){
    alert("Ikke valid CPR");
    f.cprnr.select();
    f.cprnr.focus();
    return false;
  }
}
</script>
Avatar billede loudrup Nybegynder
16. maj 2004 - 20:12 #19
nu virker det! det var dejligt. Jeg takker mange gange for hjælpen. Hvis du lige smider et svar så sender jeg dig nogle point :)
Avatar billede roenving Novice
16. maj 2004 - 20:19 #20
Velbekomme '-)
Avatar billede roenving Novice
16. maj 2004 - 21:36 #21
-- og tak for point ;~}
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