Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
De første 14 cifre bruges til at beregne det 15ende. Det er til brug til et indbetalingskort.
Dvs. at nullerne skal skrives. Når jeg laver det sådan som du har skrevet vil den ikke beregne på baggrund heraf.. Skriver jeg nullerne manuelt vil den godt.
Umiddelbart har jeg fundet denne makro som klarer beregningen af det sidste ciffer:
Public 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, 14, 14) Case "75": FindCheckCiffer = MakeCheckCiffer(Number, 15, 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, 14, 14) Case "75": vTemp = MakeCheckCiffer(vNumber, 15, 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
Ups, når vi er ude i VBA står jeg desværre af. Men der er jo heldigvis så mange andre herinde som er stærke i den sag, så du får sikkert hurtig svar. :-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.