Jojoxx
2002-05-12, 15:36
Följande objekt kan användas för att kontrollera personnummer.
function personnummer(nr){
this.valid=false;
if(!nr.match(/^(\d{2})(\d{2})(\d{2})\-(\d{4})$/)){ return false; }
this.now=new Date(); this.nowFullYear=this.now.getFullYear()+""; this.nowCentury=this.nowFullYear.substring(0,2); this.nowShortYear=this.nowFullYear.substring(2,4);
this.year=RegExp.$1; this.month=RegExp.$2; this.day=RegExp.$3; this.controldigits=RegExp.$4;
this.fullYear=(this.year*1<=this.nowShortYear*1)?(this.nowCentury+this.year)*1:((this.n owCentury*1-1)+this.year)*1;
var months = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
if(this.fullYear%400==0||this.fullYear%4==0&&this.fullYear%100!=0){ months[1]=29; }
if(this.month*1<1||this.month*1>12||this.day*1<1||this.day*1>months[this.month*1-1]){ return false; }
this.alldigits=this.year+this.month+this.day+this.controldig its;
var nn="";
for(var n=0;n<this.alldigits.length;n++){ nn+=((((n+1)%2)+1)*this.alldigits.substring(n,n+1)); }
this.checksum=0;
for(var n=0;n<nn.length;n++){ this.checksum+=nn.substring(n,n+1)*1; }
this.valid=(this.checksum%10==0)?true:false;
this.sex=parseInt(this.controldigits.substring(2,3))%2;
}
Exempel:
var pn=new personnummer("750624-6649");
if(pn.valid){
alert("Personnumret är giltigt.");
alert("Personens födelseår är "+pn.fullYear);
var sex=new Array("kvinna","man");
alert("Personen är "+sex[pn.sex]);
}
Observera att du först alltid bör kontrollera att personnumret är giltigt (pn.valid) innan du försöker läsa egenskaper från objektet. Är personnumret inte giltigt sätts inte alla egenskaper. Det som kollas är måndad (01-12), dag beroende på månad (01-xx) samt kontrollsiffran i de 4 sista sifforna. (Personnumret i exemplet är påhittat).
Egenskaper för personnummer-objektet är;
pn.valid - Giltigt personnummer eller inte (true/false).
pn.fullYear - Personens födelseår (yyyy).
pn.year - Samma som ovan (yy).
pn.month - Personens födelsemånad (mm).
pn.day - Personens födelseday (dd).
pn.controldigits - De sista 4 siffrorna i personnumret (nnnn).
pn.alldigits - Alla siffrorna i personnummret i en följd (yymmddnnnn).
pn.sex - Personens kön (0=kvinna, 1=man).
En enklare variant för organisationsnummer ser ut så här:
function organisationsnummer(nr){
this.valid=false;
if(!nr.match(/^(\d{1})(\d{5})\-(\d{4})$/)){ return false; }
this.group=RegExp.$1;
this.controldigits=RegExp.$3;
this.alldigits=this.group+RegExp.$2+this.controldigits;
if(this.alldigits.substring(2,3)<2){ return false }
var nn="";
for(var n=0;n<this.alldigits.length;n++){ nn+=((((n+1)%2)+1)*this.alldigits.substring(n,n+1)); }
this.checksum=0;
for(var n=0;n<nn.length;n++){ this.checksum+=nn.substring(n,n+1)*1; }
this.valid=(this.checksum%10==0)?true:false;
}
Fungerar i övrigt på samma sätt som personnummer-objektet. För mer information om organisationsnummer, se RSVs sida http://www.rsv.se/
Diskutera scriptet (http://www.webforum.nu/showthread.php?s=&threadid=42802).
function personnummer(nr){
this.valid=false;
if(!nr.match(/^(\d{2})(\d{2})(\d{2})\-(\d{4})$/)){ return false; }
this.now=new Date(); this.nowFullYear=this.now.getFullYear()+""; this.nowCentury=this.nowFullYear.substring(0,2); this.nowShortYear=this.nowFullYear.substring(2,4);
this.year=RegExp.$1; this.month=RegExp.$2; this.day=RegExp.$3; this.controldigits=RegExp.$4;
this.fullYear=(this.year*1<=this.nowShortYear*1)?(this.nowCentury+this.year)*1:((this.n owCentury*1-1)+this.year)*1;
var months = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
if(this.fullYear%400==0||this.fullYear%4==0&&this.fullYear%100!=0){ months[1]=29; }
if(this.month*1<1||this.month*1>12||this.day*1<1||this.day*1>months[this.month*1-1]){ return false; }
this.alldigits=this.year+this.month+this.day+this.controldig its;
var nn="";
for(var n=0;n<this.alldigits.length;n++){ nn+=((((n+1)%2)+1)*this.alldigits.substring(n,n+1)); }
this.checksum=0;
for(var n=0;n<nn.length;n++){ this.checksum+=nn.substring(n,n+1)*1; }
this.valid=(this.checksum%10==0)?true:false;
this.sex=parseInt(this.controldigits.substring(2,3))%2;
}
Exempel:
var pn=new personnummer("750624-6649");
if(pn.valid){
alert("Personnumret är giltigt.");
alert("Personens födelseår är "+pn.fullYear);
var sex=new Array("kvinna","man");
alert("Personen är "+sex[pn.sex]);
}
Observera att du först alltid bör kontrollera att personnumret är giltigt (pn.valid) innan du försöker läsa egenskaper från objektet. Är personnumret inte giltigt sätts inte alla egenskaper. Det som kollas är måndad (01-12), dag beroende på månad (01-xx) samt kontrollsiffran i de 4 sista sifforna. (Personnumret i exemplet är påhittat).
Egenskaper för personnummer-objektet är;
pn.valid - Giltigt personnummer eller inte (true/false).
pn.fullYear - Personens födelseår (yyyy).
pn.year - Samma som ovan (yy).
pn.month - Personens födelsemånad (mm).
pn.day - Personens födelseday (dd).
pn.controldigits - De sista 4 siffrorna i personnumret (nnnn).
pn.alldigits - Alla siffrorna i personnummret i en följd (yymmddnnnn).
pn.sex - Personens kön (0=kvinna, 1=man).
En enklare variant för organisationsnummer ser ut så här:
function organisationsnummer(nr){
this.valid=false;
if(!nr.match(/^(\d{1})(\d{5})\-(\d{4})$/)){ return false; }
this.group=RegExp.$1;
this.controldigits=RegExp.$3;
this.alldigits=this.group+RegExp.$2+this.controldigits;
if(this.alldigits.substring(2,3)<2){ return false }
var nn="";
for(var n=0;n<this.alldigits.length;n++){ nn+=((((n+1)%2)+1)*this.alldigits.substring(n,n+1)); }
this.checksum=0;
for(var n=0;n<nn.length;n++){ this.checksum+=nn.substring(n,n+1)*1; }
this.valid=(this.checksum%10==0)?true:false;
}
Fungerar i övrigt på samma sätt som personnummer-objektet. För mer information om organisationsnummer, se RSVs sida http://www.rsv.se/
Diskutera scriptet (http://www.webforum.nu/showthread.php?s=&threadid=42802).