Her lavet funktionerne lidt om og tilføjet en ekstra
Function FindCheckCiffer returnerer et kontrolciffer til en betalingID
Function IsCheckCifferOK chekker om kontrolcifferet i en hel betalingID er korrekt
Function MakeCheckCiffer er motor for de to andre og kan ikke bruges direkte i et regneark.
Jeg har lagt et nyt eksempel her
www.tbdl.dk/excel/betalingsident.xlsPublic Function FindCheckCiffer(Number, Cardtype)
Select Case Cardtype
Case "01", "73": GoTo fejl
Case "04", "15": FindCheckCiffer = MakeCheckCiffer(Number, 12, 15)
Case "71": FindCheckCiffer = MakeCheckCiffer(Number, 1, 14)
Case "75": FindCheckCiffer = MakeCheckCiffer(Number, 1, 15)
Case " ", """ """
If Left(Number, 1) Like "[2,4,8]" And Len(Number) = 18 Then
FindCheckCiffer = MakeCheckCiffer(Number, 18, 18)
Else
GoTo fejl
End If
Case Else: GoTo fejl
End Select
Exit Function
fejl:
FindCheckCiffer = CVErr(xlErrNA)
End Function
Public Function IsCheckCifferOK(Number As String, Cardtype) As String
Dim vTemp As Variant
Dim vNumber As Variant
vNumber = Left(Number, Len(Number) - 1)
Select Case Cardtype
Case "01", "73": GoTo fejl
Case "04", "15": vTemp = MakeCheckCiffer(vNumber, 12, 15)
Case "71": vTemp = MakeCheckCiffer(vNumber, 1, 14)
Case "75": vTemp = MakeCheckCiffer(vNumber, 1, 15)
Case " ", """ """
If Left(vNumber, 1) Like "[2,4,8]" And Len(vNumber) = 18 Then
vTemp = MakeCheckCiffer(vNumber, 18, 18)
Else
GoTo fejl
End If
Case Else: GoTo fejl
End Select
If vTemp = CInt(Right(Number, 1)) Then
IsCheckCifferOK = "OK"
Else
IsCheckCifferOK = "Ikke OK"
End If
Exit Function
fejl:
IsCheckCifferOK = CVErr(xlErrNA)
End Function
Private Function MakeCheckCiffer(Number, lmin As Long, lmax As Long) As Variant
Dim Chksum As Long
Dim tsum As Long
Dim x As Long
Dim chk As Long
Dim start As Boolean
On Error GoTo fejl
If Len(Number) < lmin Or Len(Number) > lmax Then GoTo fejl
chk = Len(Number)
Chksum = 0
start = False
For x = chk To 1 Step -1
tsum = CInt(Mid(Number, x, 1)) * (start + 2)
start = Not start
If tsum > 9 Then tsum = CInt(Left(tsum, 1)) + CInt(Mid(tsum, 2, 1))
Chksum = Chksum + tsum
Next
Chksum = Chksum Mod 10
If Chksum <> 0 Then Chksum = 10 - Chksum
MakeCheckCiffer = Chksum
Exit Function
fejl:
MakeCheckCiffer = CVErr(xlErrNA)
End Function