- Har du skrivit enligt J.N.:s anvisningar, d.v.s. if (!pn.valid)?
- Personnumret skall anges enligt YYMMDD-KKKK
Personnummer-kontroll
34 svar · 4 675 visningar · startad av Jojoxx · sida 2 av 2
Absolut... men är detta rätt sätt för att få in personnummret i variabeln pn:
var pn=new personnummer(document.register.registerPn.value);
Det ser rätt ut. Jag bifogar en fungerande variant som du kanske kan utgå ifrån:
<script type="text/javascript">
/**
* isValidEmail() and personnummer() by member Jojoxx ([url]www.jojoxx.net[/url]) at webForum.nu
*/
String.prototype.isValidEmail = function(){
return !!this.match(/^([a-zA-Z0-9]{1}([a-zA-Z0-9\.\-\_]*)[a-zA-Z0-9]{1})@([a-zA-Z0-9]{1}([a-zA-Z0-9\.\-\_]*)[a-zA-Z0-9]{1})\.([a-zA-Z]{2,4})$/)
}
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;
}
function checkRegister(){
var elms = document.forms["register"].elements;
if (elms["registerPass"].value != elms["registerPass2"].value){
alert('Lösenorden måste vara lika!');
elms["registerPass2"].focus();
return false;
}
var pn=new personnummer(elms["registerPn"].value);
if(!pn.valid){
alert('Personnumret är ogiltigt.');
elms["registerPn"].focus();
return false;
}
if(!elms["registerEmail"].value.isValidEmail()){
alert('Du måste fylla i korrekt en epostadress!');
document.register.registerEmail.focus();
return false;
}
if(!elms["registerAcceptTerms"].checked){
alert('Du måste godkänna användarvillkoren!');
return false;
}
return true;
}
</script>
<form name="register">
<input type="text" name="registerPass">
<input type="text" name="registerPass2">
<input type="text" name="registerPn">
<input type="text" name="registerEmail">
<input type="checkbox" name="registerAcceptTerms">
</form>
<a href="javascript:void(0)" onclick="if (checkRegister()) document.forms['register'].submit()">Registrera</a>
Nu vet jag vad som är fel... den vill ju inte har tex 19800101-0000 utan 800101-0000... vad irriterande enkelt :)
samt kontrollsiffran i de 4 sista sifforna.
Slutade man inte med kontrollsiffror, nån gång runt 1992?
aron skrev:
Slutade man inte med kontrollsiffror, nån gång runt 1992?
Varför tror du det? Kontrollsiffran är väldigt bra att ha när man hanterar personnummer eftersom den skyddar mot många felskrivningar. Man måste skriva fel på minst två siffror, och då är det bara 10% risk att lyckas få till ett nummer där kontrollsiffran ändå stämmer.
2003-12-10 fanns i alla fall kontrollsiffran kvar:
Det enda jag vet som är ändrat är att man inte längre kan se var personen är född någonstanns.
Hoppar på och ställer mig i led bakom Jojoxx, har också hört att man ändrat så att man inte kan se VAR personen är född. Man slumpar ut siffrorna idag istället.
HEJ!
Absolut används kontrollsiffran, livet vore bra mycket svårare utan den!
Det som gäller är att man inte kan se i vilket område en person är född, som nämnts tidigare.
Kontrollsiffror används på många ställen, tex när man betalar räkningar.
Det vore trist att fylla i 30-ställiga referensnummer, utan att få kvittens på att de är korrekta. §jr
Eftersom jag inte kan mycket javascript så är jag väldigt tacksam för detta. Jag har bara en fråga. Jag vill kolla så det är rätt personnummer + att personen är över en viss ålder. Någon som har koll på detta?
sen får jag inte denna koden att validera personnumret. Någon vänlig person som har lust att kolla på detta?
formchecken fungerar kanon ända tills det är dags för personnumret.
<script language="JavaScript">
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;
}
String.prototype.isValidEmail = function(){
return !!this.match(/^([a-zA-Z0-9]{1}([a-zA-Z0-9\.\-\_]*)[a-zA-Z0-9]{1})@([a-zA-Z0-9]{1}([a-zA-Z0-9\.\-\_]*)[a-zA-Z0-9]{1})\.([a-zA-Z]{2,4})$/)
}
var pn=new personnummer(document.fo.persnum1.value + '-' + document.fo.persnum2.value);
function validateForm() {
if (document.fo.name.value=="") {
alert("Du måste fylla i ett namn.");
return false;
}else if (document.fo.address.value=="") {
alert("Du måste fylla i en adress.");
return false;
} else if (document.fo.zip.value=="") {
alert("Du måste fylla i ett postnummer.");
return false;
} else if (document.fo.city.value=="") {
alert("Du måste fylla i en ort.");
return false;
} else if (!document.fo.email.value.isValidEmail()) {
alert("Du måste fylla i korrekt en E-mail adress.");
return false;
} else if (document.fo.phone.value=="") {
alert("Du måste fylla i ett telefonnummer.");
return false;
} else if(!pn.valid){
alert("Personnumret är ogiltigt.");
}else {
alert("Ditt meddelande har skickats iväg.");
return true;
}
}
</script>
<form action="" name="fo" onsubmit="return validateForm()" method="post">
<table>
<tr><td colspan="2"><strong>namn</strong><br /><input type="text" class="textarea" name="name" style="width:200px;"></td></tr>
<tr><td colspan="2"><strong>adress</strong><br /><input type="text" class="textarea" name="address" style="width:200px;"></td></tr>
<tr><td><strong>postnummer</strong><br /><input type="text" class="textarea" name="zip" style="width:40px;"></td>
<td><strong>ort</strong><br /><input type="text" class="textarea" name="city" style="width:120px;"></td></tr>
<tr><td colspan="2"><strong>personnummer</strong><br />Personnummret kommer inte att sparas av oss utan användas endast för att validera din ålder.<br /><input type="text" name="persnum1" class="textarea" maxlength="6" style="width:50px;">-<input type="text" name="persnum2" class="textarea" maxlength="4" style="width:35px;"></td></tr>
<tr><td colspan="2"><strong>email</strong><br /><input type="text" name="email" class="textarea" style="width:200px;"></td></tr>
<tr><td colspan="2"><strong>telefon</strong><br /><input type="text" name="phone" class="textarea" style="width:200px;"></td></tr>
<tr><td colspan="2" style="text-align:center;"><input type="submit" name="btnSubmitTasting" value="skicka anmälan" style="color:black;background:#F4F6F4;border:1px solid black;"></td></tr>
</table>
</form>
<script language="JavaScript">
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;
}
String.prototype.isValidEmail = function(){
return !!this.match(/^([a-zA-Z0-9]{1}([a-zA-Z0-9\.\-\_]*)[a-zA-Z0-9]{1})@([a-zA-Z0-9]{1}([a-zA-Z0-9\.\-\_]*)[a-zA-Z0-9]{1})\.([a-zA-Z]{2,4})$/)
}
function validateForm() {
if (document.fo.name.value=="") {
alert("Du måste fylla i ett namn.");
return false;
}else if (document.fo.address.value=="") {
alert("Du måste fylla i en adress.");
return false;
} else if (document.fo.zip.value=="") {
alert("Du måste fylla i ett postnummer.");
return false;
} else if (document.fo.city.value=="") {
alert("Du måste fylla i en ort.");
return false;
} else if (!document.fo.email.value.isValidEmail()) {
alert("Du måste fylla i korrekt en E-mail adress.");
return false;
} else if (document.fo.phone.value=="") {
alert("Du måste fylla i ett telefonnummer.");
return false;
} else if(!new personnummer(document.fo.persnum1.value + '-' + document.fo.persnum2.value).valid){
alert("Personnumret är ogiltigt.");
} else if(parseInt(document.fo.persnum1.value.substring(0,4)) < 18){
alert("...");
} else {
alert("Ditt meddelande har skickats iväg.");
return true;
}
}
</script>
<form action="" name="fo" onsubmit="return validateForm()" method="post">
<table>
<tr><td colspan="2"><strong>namn</strong><br /><input type="text" class="textarea" name="name" style="width:200px;"></td></tr>
<tr><td colspan="2"><strong>adress</strong><br /><input type="text" class="textarea" name="address" style="width:200px;"></td></tr>
<tr><td><strong>postnummer</strong><br /><input type="text" class="textarea" name="zip" style="width:40px;"></td>
<td><strong>ort</strong><br /><input type="text" class="textarea" name="city" style="width:120px;"></td></tr>
<tr><td colspan="2"><strong>personnummer</strong><br />Personnummret kommer inte att sparas av oss utan användas endast för att validera din ålder.<br /><input type="text" name="persnum1" class="textarea" maxlength="6" style="width:50px;">-<input type="text" name="persnum2" class="textarea" maxlength="4" style="width:35px;"></td></tr>
<tr><td colspan="2"><strong>email</strong><br /><input type="text" name="email" class="textarea" style="width:200px;"></td></tr>
<tr><td colspan="2"><strong>telefon</strong><br /><input type="text" name="phone" class="textarea" style="width:200px;"></td></tr>
<tr><td colspan="2" style="text-align:center;"><input type="submit" name="btnSubmitTasting" value="skicka anmälan" style="color:black;background:#F4F6F4;border:1px solid black;"></td></tr>
</table>
</form>
tackar!
Nu kom jag halvvägs i alla fall.
misstänkte att denna skulle kolla om de var under 18 eller inte.
if(parseInt(document.fo.persnum1.value.substring(0,4)) < 18){
alert("...");
}
jag fick det inte att fungera trotts att jag la in
return:false;
Men tack för hjälpen!
nu är jag lite närmre målet och kan börja försöka hitta lösningen på nästa del. var väldigt nära att göra om det till en php-lösning :)
tack!
else if(!new personnummer(document.fo.persnum1.value + '-' + document.fo.persnum2.value).valid){
alert("Personnumret är ogiltigt.");
return false;
} else if(parseInt(document.fo.persnum1.value.substring(0,4)) < 20){
alert("...");
return false;
}
hade redan gjort det. klanta mig när jag skrev inlägget.. så här ser det ut
blev dubbelpostat