Guffa | Foto | Programmering

Kontrollera personnummer

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.