Den här funktionen kontrollerar ifall ett personnummer är korrekt:
Function CheckNumber(ByVal strNumber)
' deklarera variabler
Dim lngSum, lngTemp, lngPos
' kontrollera formatet
With New RegExp
.Pattern = "^\d{2}-?\d{2}-?\d{2}-?\d{4}$"
If not .Test(strNumber) Then
CheckNumber = False
Exit function
End If
End With
' ta bort eventuella bindestreck
strNumber = Replace(strNumber,"-","")
' beräkna checksumman
lngSum = 0
For lngPos = 1 to 10
lngTemp = CLng(Mid(strNumber, lngPos, 1)) * ((lngPos mod 2) + 1)
If lngTemp > 9 Then lngTemp = lngTemp - 9
lngSum = lngSum + lngTemp
Next
' kontrollera checksumman
CheckNumber = (lngSum mod 10) = 0
End Function
Funktionen accepterar personnummer med eller utan bindestreck mellan datum och de sista fyra siffrorna, och med eller utan bindestreck mellan delarna i datumet. Exempel på giltiga format: "1234567890", "123456-7890" och "12-34-56-7890".
Du kan använda den så här:
If CheckNumber(strPersonnr) Then
Response.Write "Personnumret är korrekt."
Else
Response.Write "Personnumret är inte korrekt."
End If
Observera att funktionen bara kontrollerar formatet och kontrollsiffran. Det innebär ju ingen garanti varken för att personnumret verkligen existerar, eller att det innehåller ett korrekt datum.
Funktionen kan även användas för att kontrollera organisationsnummer, eftersom de är uppbyggda med samma typ av kontrollsiffra.