webForumDet fria alternativet

Personnummer-kontroll

0 svar · 12 412 visningar · startad av Jojoxx

JojoxxMedlem sedan juni 20004 308 inlägg
#1

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.nowCentury*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.controldigits;
	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.

127 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)