Gå til innhold

[Løst] Sjekksumkontroll av bankkontonummer gir falsk negativ


Anbefalte innlegg

Hei!

 

Jeg har laget en inputkontroll på en tekstboks i et Access skjema for å kontrollere at det inntastede kontonummeret er gyldig.

 

Den virker på mitt og mange kontonummer, men i går når opplegget ble brukt "live" var det flere kontonummer som ble avslått som ugyldige. Det til tross for at de ble skrevet av rett fra bankkort.

 

Jeg har tatt utgangspunkt i denne Wiki-artikkelen når jeg skrev koden:

http://no.wikipedia.org/wiki/MOD11

 

Microsoft Visual Basic-koden:

Private Sub Konto_BeforeUpdate(Cancel As Integer)
Dim Vekttall As Variant
Dim TvSum As Integer
Dim Kontonr As String
If IsNull(Forms![frmRegLeverandør]![Konto]) = False Then
Kontonr = Forms![frmRegLeverandør]![Konto]

If Len(Kontonr) = 11 Then
	TvSum = 0
	Vekttall = Array(5, 4, 3, 2, 7, 6, 5, 4, 3, 2)

	Dim i As Integer

	For i = 1 To 10
		TvSum = TvSum + Vekttall(i - 1) * Val(Mid(Kontonr, i, 1))
	Next i
	If (11 - (TvSum Mod 11)) <> Val(Mid(Kontonr, 11, 1)) Then
		MsgBox ("Feil i sjekksum!" & vbCrLf & vbCrLf & "Har du skrevet inn riktig nummer?")
	End If

Else
	MsgBox ("Må være 11 tall uten skilletegn.")
End If


End If
End Sub

 

Det som er litt kjedelig er at jeg ikke kan gi eksempler på kontonummer som blir ugyldige, fordi det er sensitiv informasjon.

 

Men jeg fant nå et kontonummer som gir feil, og det slutter på 0.

Kan det ha noe med denne setningen i den nevnte Wiki-artikkelen å gjøre?

Dersom tverrsummen er delelig med 11 blir også resten 0 og kontrollsifferet 0. Dersom «resten» ved divisjonen blir 1 skal «kontrollsifferet» ha tallverdien 10, da benyttes isteden et minustegn (eller bindestrek) istedenfor kontrollsifferet. Imidlertid gjelder for kontonumre (og også for personnummer) at slike tall isteden skal forkastes slik at for de typene tall kan kontrollsiffer «-» aldri forekomme.

 

 

Så, hvis noen kan hjelpe meg med å se hva som er galt så er jeg takknemmelig!

Lenke til kommentar
Videoannonse
Annonse

Det stemmer at dette feiler for kontonr. som slutter på 0. Hvis tverrsummen er delelig med 11, vil (11 - (TvSum Mod 11)) bli 11. Da skal kontrollsifferet være 0. Du kan vel fikse det ved å bruke "mod 11" en gang til, slik:

((11 - (TvSum Mod 11)) Mod 11)

Endret av jonny
  • Liker 2
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...