Hej! <code>Personnummer check
Är det något som har ett färdigt skript i VBScript eller JavaScript som kontrollerar om ett personnummer man har skrivit in är giltligt?
Jag har gjort ett JavaScript som jag trodde fungerade men när kunden skulle testa det (Hade redan köpt och installerat det på sitt företag) så fick han fel hela tiden! Så det är en smula bråtom men detta.
Tack på förhand //TompanSv: Personnummer check
<script type="text/javascript">
function checkPnr() {
var err = 0 // korrekt pnr
var pnr = document.f1.fpnr.value
//personnummer 10-11 siffror med eller utan "-"
var l = pnr.length // antal siffror
// koll av antal siffror
if ( ( l == 11 && ( pnr.indexOf("-") == -1 ) ) || l < 10 ) err = 1
// plockar ut delar av pnr
var yy = pnr.substr(0,2) // år
var mm = pnr.substr(2,2) // månad
var dd = pnr.substr(4,2) // dag
var pp = pnr.substr(0,6) // sex första
var s = pnr.substr((l-4),4) // 4 sista
// koll att bara siffror används
if ( isNaN(pp) || isNaN(s) ) err = 1
// koll av månad
if ( mm < 1 || mm > 12 ) err = 1
// koll av dag
if ( dd < 1 || dd > 31 ) err = 1
// koll för 30 dagar
if ( mm == 4 || mm == 6 || mm == 9 || mm == 11 ) {
if ( dd == 31 ) err = 1
}
// skottår
if ( mm == 2 ) {
if ( dd > 29 ) err = 1
if ( dd == 29 && ( (yy/4) != parseInt(yy/4) ) ) err = 1
}
// koll av kontrollsiffra
pnr = pp + s // alla 10 siffrorna i rad
var y,x = 0 // för beräkning
for ( var i = 0; i < 9; i++ ) {
if ( i % 2 == 0 ) {y=pnr.substr(i,1)*2;if(y>9)y-=9;x+=y}
else x += (pnr.substr(i,1)*1)
}
while ( x > 9 ) x -= 10
if ( x != 0 ) x = 10 - x
// koll om siffran stämmer
if ( s.substr(3,1) != x ) err = 1
// utskrift av felmeddelande
if ( err != 0 ) {
alert("Personnumret är felaktigt");
return false;
}
}
</script>
<form name="f1" onsubmit="return checkPnr()">
<input name="fpnr"><br>
<input type="submit" value="Kolla">
</form>
</code>