Jag såg en lösning för personnummerkontroll i JAVA-Script forumet, och undrar nu om någon gjort något liknande i VBScript/ASP !? Hej Aaah .. :) Hej Nepp! Hej OK! Formeln för att kontrollera om ett personnummer stämmer eller ej är en ganska enkel formel, och kan läggas in som en programfunktion i ex Visual Basic. Jag skrev ett script i javascript forumet och har översatt det scriptet till vbscript, du kanske kan få något tips om du tittar på det. Helt lysande :) Här har jag två funktioner som använder Regular Expressions:Personnummerkontroll i VBScript
Att helt enkelt kolla om ett personnummer verkligen är ett personnummer eller organisationsnummer.
Alla tips är välkomna.
mvh
TorbjörnSv: Personnummerkontroll i VBScript
Kolla om du kan bygga om mitt exempel.
http://www.pellesoft.nu/login/upload/t_view4.asp?tid=59
mvh
SvenSv: Personnummerkontroll i VBScript
Hej Sven!
OK!
Med risk för att låta "stupido", men vad utför denna kontrollsiffra :) ?
Jag var nog lite luddig i min beskrivning av den önskade funktionen.
Jag tänkte mig en enklare funktion som bara talar om att personnumret verkligen är ett personnummer alternativt organisationsnummer.
Är det inmatade numret felaktigt så skall en "aja-baja" text informera om att nu är det nog lite fel nånstans ....
Kanske är detta en avancerad pryl att snickra ihop??
mvh
TorbjörnSv: Personnummerkontroll i VBScript
Lite fantasi, Kolla på ditt eget personnummer ,de 9
första siffrorna då skall du få ut den 10 siffran.
Stämmer detta inte mot verkligheten är det ett
felaktigt personnummer.
SvenSv: Personnummerkontroll i VBScript
Fick ut siffran 10 där det skulle vara 0 ;o)
OK jag fattar principen nu!
mvh
TorbjörnSv: Personnummerkontroll i VBScript
"Tänkte inte på de"
Näst sist i Funktionen
If Knum = 10 Then Knum = 0
mvh
SvenSv: Personnummerkontroll i VBScript
Skall försöka översätta till VBScript/ASP.
Jag återkommer nog snart när jag kör fast =o.
Tack för hjälpen
TorbjörnSv: Personnummerkontroll i VBScript
Personnr = 560321-830 vad är sista siffran ?
5x2 = 10
6x1 = 6
0x2 = 0
3x1 = 3
2x2 = 4
1x1 = 1
8x2 = 16
3x1 = 3
0x2 = 0
Skriv svaren på en lång rad.
10603411630
summera siffrona
1+0+6+0+3+4+1+1+6+3+0 = 25
Den sista siffran får du fram genom att fråga dig, hur mycket måste jag lägga till för att svaret skall sluta på en nolla (0)
Svar = 5
Den sista siffran skall alltså vara en femma(5) och personnummret blir då följande:
560321-8305
Hoppas detta hjälper dig
Mvh Thorbjörn (här också)Sv: Personnummerkontroll i VBScript
<script type="text/vbscript">
function checkPnr(pnr)
dim err ' korrekt pnr
err = 0
' personnummer 10-11 siffror med eller utan "-"
dim l 'antal siffror
l = len(pnr)
' koll av antal siffror
if ( l = 11 and instr(pnr,"-") = 0 ) or l < 10 then
err = 1
end if
' plockar ut delar av pnr
dim yy ' år
yy = left(pnr,2)
dim mm ' månad
mm = mid(pnr,3,2)
dim dd ' dag
dd = mid(pnr,5,2)
dim pp ' sex första
pp = left(pnr,6)
dim s ' 4 sista
s = right(pnr,4)
' koll att bara siffror används
if isnumeric(pp) <> true or isnumeric(s) <> true then
err = 2
end if
' koll av månad
if mm < 1 or mm > 12 then
err = 3
end if
' koll av dag
if dd < 1 or dd > 31 then
err = 4
end if
' koll för 30 dagar
if mm = 4 or mm = 6 or mm = 9 or mm = 11 then
if dd = 31 then
err = 5
end if
end if
' skottår
if mm = 2 then
if dd > 29 then
err = 6
end if
if dd = 29 and ( yy mod 4 <> 0 ) then
err = 7
end if
end if
' koll av kontrollsiffra
pnr = pp & s ' alla 10 siffrorna i rad
dim y,x ' för beräkning
x = 0
for i = 1 to 9
if i mod 2 <> 0 then
y = mid(pnr,i,1) * 2
if y > 9 then
y = y - 9
end if
x = x + y
else
x = x + cint(mid(pnr,i,1))
end if
next
while x > 9
x = x - 10
wend
if x <> 0 then
x = 10 - x
end if
' koll om siffran stämmer
if cint(right(s,1)) <> x then
err = 8
end if
' utskrift av felmeddelande
if err <> 0 then
' här kan man tänka sig olika felmeddelande
msgbox("Personnumret är felaktigt")
end if
end function
' för test
checkpnr("440229-3023")
</script>
/ChristianSv: Personnummerkontroll i VBScript
Med hjälp av detta blev det en ASP-lösning..
håll till godo !
---------------------------------------------------------------
Formulär:
<html>
<head>
<title>Personnummerkoll</title>
</head>
<body>
<form action="pnr_check.asp" method="post">
<input type="text" name="pnr"><br>
<input type="submit" value="Kolla">
</form>
</body>
</html>
-- pnr_check.asp -------------------------------------------
<%
PnrKoll = Request.Form("pnr")
Checkpnr(PnrKoll)
Function CheckPnr(pnr)
Dim Err ' korrekt pnr
Err = 0
' personnummer 10-11 siffror med eller utan "-"
Dim l 'antal siffror
l = len(pnr)
' koll av antal siffror
If ( l = 11 AND InStr(pnr,"-") = 0 ) OR l < 10 Then
Err = 1
End If
' plockar ut delar av pnr
Dim yy ' år
yy = Left(pnr,2)
Dim mm ' månad
mm = mid(pnr,3,2)
Dim dd ' dag
dd = mid(pnr,5,2)
Dim pp ' sex första
pp = left(pnr,6)
Dim s ' 4 sista
s = Right(pnr,4)
' koll att bara siffror används
If isnumeric(pp) <> True OR isnumeric(s) <> True Then
Err = 2
End If
' koll av månad
If mm < 1 OR mm > 12 Then
Err = 3
End If
' koll av dag
If dd < 1 OR dd > 31 Then
Err = 4
End If
' koll för 30 dagar
If mm = 4 OR mm = 6 OR mm = 9 OR mm = 11 Then
If dd = 31 Then
Err = 5
End If
End If
' skottår
If mm = 2 Then
If dd > 29 Then
Err = 6
End If
If dd = 29 AND ( yy mod 4 <> 0 ) Then
Err = 7
End If
End If
' koll av kontrollsiffra
pnr = pp & s ' alla 10 siffrorna i rad
Dim y,x ' för beräkning
x = 0
For i = 1 To 9
If i mod 2 <> 0 Then
y = Mid(pnr,i,1) * 2
If y > 9 Then
y = y - 9
End If
x = x + y
Else
x = x + Cint(Mid(pnr,i,1))
End If
Next
While x > 9
x = x - 10
Wend
If x <> 0 Then
x = 10 - x
End If
' koll om siffran stämmer
If Cint(Right(s,1)) <> x Then
Err = 8
End If
' utskrift av felmeddelande
If Err <> 0 Then
Response.Write("Personnumret: " & pnr & " " & "är felaktigt!")
Else
Response.Write("Personnumret: " & pnr & " " & "är korrekt!")
End If
End Function
%>
--------------------------------------------------
väl mött
TorbjörnSv: Personnummerkontroll i VBScript
<code>
Function Kontrollsiffra(PersonNr)
Dim re
Dim Index
Dim Check
Dim Number
Dim strText
Set re = New RegExp
re.Pattern = "^[0-9]{6}-[0-9]{4}$|^[0-9]{8}-[0-9]{4}$"
If re.Test(PersonNr) Then
re.Pattern = "^([0-9]{6})-([0-9]{3})[0-9]$|^[0-9]{2}([0-9]{6})-([0-9]{3})[0-9]$"
strText = re.Replace(PersonNr, "$1$2$3$4")
For Index = 1 To 9
Number = CLng(Mid(strText, Index, 1))
If Number Then
If Index And 1 Then
If Number <= 4 Then
Check = Check + Number * 2
Else
Check = Check + (Number * 2) - 9
End If
Else
Check = Check + Number
End If
End If
Next
Check = Check Mod 10
PersonNrKontrollsiffra = ((10 - Check) Mod 10)
Else
Err.Raise 5, "PersonNrKontrollsiffra", "Felaktig personnummer." & vbCrLf & _
"Giltliga format är: ########-####"
End If
End Function
Function FixPersonNr(Value)
Dim re
Dim strTemp
Set re = New RegExp
re.Pattern = "^[0-9]{6}-?[0-9]{4}$|^[0-9]{8}-?[0-9]{4}$"
If re.Test(Value) Then
re.Pattern = "([0-9]{4})([0-9]{2})([0-9]{2})-?[0-9]{4}|([0-9]{2})([0-9]{2})([0-9]{2})-?[0-9]{4}"
strTemp = re.Replace(Value, "$1$4-$2$5-$3$6")
If IsDate(strTemp) Then
re.Pattern = "^([0-9]{6})-?([0-9]{4})$|^([0-9]{8})-?([0-9]{4})$"
FixPersonNr = re.Replace(Value, "$1$3-$2$4")
Else
Err.Raise 5, "PersonNrFormat", "Felaktig år och/eller månad."
End If
Else
Err.Raise 5, "PersonNrFormat", "Felaktig gruppering av personnummer." & vbCrLf & _
"Giltliga gruppering är: ##########, ######-####, ############ och ########-####"
End If
End Function
</code>