Japp, personangrepp kan vi skippa, kan tom vara så vänlig att jag postar en variant åt dig. Denna kollar dock inte giltigheten på århundradet, vilket gör att du kan knappa in att du är född på 1700-talet utan att den klagar.
Kod:
function valideraPersonnummer(x) {
x = x.replace(/[^\d]/g,'');
if (x.length==10) {
var y = parseInt(x.substring(0,2));
var m = parseInt(x.substring(2,4));
var d = parseInt(x.substring(4,6));
var n = parseInt(x.substring(6,10));
} else if (x.length==12) {
x = x.substring(2,12);
var y = parseInt(x.substring(2,4));
var m = parseInt(x.substring(4,6));
var d = parseInt(x.substring(6,8));
var n = parseInt(x.substring(8,12));
} else {
alert("Fel antal siffror i personnummer");
return false;
}
var datum = new Date(y,m-1,d);
if ((d!=datum.getDate()) || (m!=datum.getMonth()+1) || (y!=datum.getYear())) {
alert("Felaktigt datumformat");
return false;
}
var s=0;
for (i=0; i<9; i++) {
var t = parseInt(x.substring(i,i+1));
if (i%2==0)
t*=2;
if (t>=10)
s=s+1+(t%10);
else
s+=t;
}
var c=10-Math.floor(s%10);
if (c==10) c=0;
if (c!=(n%10)) {
alert("Felaktig kontrollsiffra");
return false;
}
alert("Personnummer korrekt");
return true;
}