25. oktober 2002 - 15:03 Der er 23 kommentarer og
2 løsninger

Check af bankkontonr

Jeg søger et bankkontonr-check á la Modulus-11-check til CPR-numre.

Der er jo et checkciffer på både bankkontonumre og på gironumre.

Det er denne beregning, som jeg ønsker (i VB eller blot som matematisk formel)

/Thomas
Avatar billede bennytordrup Nybegynder
25. oktober 2002 - 15:21 #1
Lytter
25. oktober 2002 - 15:52 #2
Kontrollen er nøjagtigt den samme, som udføres på CPR-nr med de samme vægte. Dvs. den udføres på de første 9 cifre af det 10-cifrede bankkontonummer. Er kontonummeret på færre end 10 cifre sættes nuller foran så kontonummeret er 10-cifret.
25. oktober 2002 - 15:55 #3
Der er et skema til beregningen på Økonomidirektoratets hjemmeside:
http://191101oes.oes.dk/sw764.asp

Det er CPR-chekket, der er beskrevet, men brug den til kontonumre også.
25. oktober 2002 - 16:23 #4
Erik Juul-> Jeg har testet Modulus-11-metoden på 200 kontonumre fra vores kundekartotek. Over halvdelen bestod ikke. Har du noget dokumentation på, at denne metode også duer på bankkontonumre?

Og hvad med giro-numre? De ser jo helt anderledes ud...?

/Thomas
25. oktober 2002 - 16:34 #5
Gironumre er jo blot 7 cifrede kontonumre, sæt 3 nuller foran sæ virker det også her.
25. oktober 2002 - 16:41 #6
Hvordan har du registreret dine kontonumre, er de 10-cifrede?
25. oktober 2002 - 16:48 #7
ja

Giro-numre er jo byggede op som 2 + 16 + 8 cifre!
Hvordan checker du det?
25. oktober 2002 - 16:51 #8
2+16+8 Det er vist OCR-linien på et indbetalingskort. De 2 er lig med kort-typen - 16 er lig med betalings-ID og de sideste 8 er kontonummeret. Sæt 2 nuller foran de 8 cifre og du har et 10-cifret kontonummer, der kan chekkes med mod.11
25. oktober 2002 - 22:09 #9
Erik, jeg kan med sikkerhed sige at Modulus-11-metoden ikke duer på bankkonti! Jeg har lige prøvet med mit eget dankort, og det virker ikke!

Er der nogle andre bud? Jeg forhøjer til 200 p.
25. oktober 2002 - 22:35 #10
Jeg har nu fundet frem til, at det IKKE er modulus-11-metoden, men derimod Modulus-10-metoden, som skal benyttes til kontonumre.

Nu er det jo desværre sådan, at man ikke bare kan skifte den ene linie i koden, hvor der står:
If (checksum Mod 11) = 0 Then ...
ud med
If (checksum Mod 10) = 0 Then ...

Jeg har kun kunnet finde frem til stump XML-kode, som beregner checkciffer. Men da det lige så godt kunne stå på Swahili, så håber jeg at nogen af Jer multi-genier vil være behjælpelig med 'oversættelsen' til VB.
Den findes halvvejs nede på denne side:
http://www.blconsulting.dk/site.php?_page=tipsdiv.html#modulus10

Selvfølgelig, hvis nogen i forvejen ligger inde med en Modulus-10-funktion, så er de selvfølgelig meget velkomne til at score de 200p
Avatar billede vision-jsp Nybegynder
25. oktober 2002 - 23:17 #11
Det er noget i retning af dette, men "prod" skal være 2 lang og med foranstillet nu hvis du forstår - "02", men det kan jeg ikke lige finde ud af...:


Dim konto
Dim mult1
Dim mult2
Dim counter As Integer
Dim prod
Dim addi
Dim rest As Long
Dim check_digit


konto = "123456789"
mult2 = 2
counter = 9

Do While counter > 0
mult1 = Mid(konto, counter, 1)
prod = mult1 * mult2
addi = addi + Mid(prod, 1, 1) + Mid(prod, 2, 1)
  If mult2 = 1 Then
    mult2 = 2
  Else
    mult2 = 1
  End If
counter = counter - 1
Loop
                                         
rest = addi Mod 10
                                         
modu = (10 - rest) Mod 10
                                         
check_digit = modu

Som du ser tager man de 9 første og "regner" baglæns...
26. oktober 2002 - 00:27 #12
Hej Vision,

tak for dit arbejde :o)
Jeg arbejdet lidt med det og er kommet frem til denne funktion, som du meget gerne lige må kigge på:

Public Function CheckKonto(Kontonr As String) As Boolean
    Dim mult1 As Byte
    Dim mult2 As Byte
    Dim Konto As String
    Dim counter As Integer
    Dim prod As String
    Dim addi As Variant
    Dim rest As Long
    Dim check_digit As Byte
   
    mult2 = 2
    counter = 9
    Konto = Left(Kontonr, 9)
    check_digit = Right(Kontonr, 1)
   
    Do While counter > 0
        mult1 = Mid(Konto, counter, 1)
        prod = Format(mult1 * mult2, "00")
        addi = addi + Val(Mid(prod, 1, 1)) + Val(Mid(prod, 2, 1))
        If mult2 = 1 Then
          mult2 = 2
        Else
          mult2 = 1
        End If
        counter = counter - 1
    Loop
    rest = addi Mod 10
    If check_digit = (10 - rest) Mod 10 Then CheckKonto = True
End Function

Problemet er, at jeg ikke er helt med på, hvad du vil med mult1 og mult2, samt prod. Derfor har jeg tilsjusket mig til denne kode.
Du indtaster det fulde kontonr som parameter og funktionen returnerer true eller false afhængig af om check_digit er lig det sidste ciffer.

Men det virker ikke på mit kontonr :o(
Avatar billede vision-jsp Nybegynder
26. oktober 2002 - 06:39 #13
Hej
Det kan måske godt gøres smartere, men det var taget fra et andet sprog (ABAP) og "oversat" på bedste beskub. mult1 bruger jeg til at det ciffer jeg er nået til og mult2 er fodi der skiftevis skal ganges med 1 og med 2.

Jeg har 2 konti: i Basisbank passer det heller ikke, men i Lokalbanken er det ok. Men er du sikker på, at kontonumre checkes med MOD 10?. Det gør SE-nr. fx også...
26. oktober 2002 - 17:02 #14
Hej Erik.
Du har helt ret i at det både er modulus 11 der bruges både til CPR-NR og bankkonti.
God weekend.

Med venlig hilsen
26. oktober 2002 - 17:08 #15
Ovennævnte bekræftelse netop modtaget fra en person, der har udviklet et lønprogram indeholdende bl.a. check af både cpr og bankkonto-numre. Det kunne tænkes at dine problemer med at få modulus 10-checkket til at fungere skyldes at du bruger et forkert modulus-check trods mine tidligere indlæg.
Måske skulle du starte med at kigge på formatet for et kontonummer.
26. oktober 2002 - 20:48 #16
Modulus 10 bruges til check af det 16-cifrede betaler-id på indbetalingskort.
Avatar billede vision-jsp Nybegynder
26. oktober 2002 - 22:31 #17
Men så er problemet vel løst? Så skal du bare tilbage til dit modulus 11 check... Måske har i bare mange forkerte kontonumre eller?
27. oktober 2002 - 03:26 #18
Erik-> hvordan forklarer du så, at begge de kontonumre jeg har (fra henholdsvis Lån & Spar og Nordea) er forkerte i henhold til Modulus-11?
Visio->de 200 kunder, som jeg snakkede om er tilmeldt PBS på det kontonr, som er registreret i vores database. Dette ville næppe kunne lade sige gøre hvis kontonumrene 60-70% var forkerte.

Det link, som jeg virste før (http://www.blconsulting.dk/site.php?_page=tipsdiv.html#modulus10) skelner jo netop også mellem Modulus-11 til CPR og Modulus-10 til kontonumre på 10 cifre.

Når jeg søger på "kontonr +modulus" på diverse søgemaskiner får jeg en masse links, som siger at jeg skal bruge Modulus 10-metoden (dog uden at give en præcis formel)

Grundet ovenstående, kan jeg ikke acceptere modulus 11 som et gyldigt svar.
27. oktober 2002 - 18:17 #19
Kan du give et eksempel på et kontonummer, der ikke kan klare Modulus-11 checket, jeg har ikke kunnet finde nogen.
Hvis halvdelen af dine numre ikke opfylder chekket vil jeg foreslå dig at du lige kontrollere din måde at beregne Modulus-11 på.
27. oktober 2002 - 19:38 #20
Her er en række numre, som ikke slipper gennem min Modulus-11:

9180474862
6264366346
3131819412
3326254738
3031108887
1001111233
7951734092

Jeg VED i hvert fald at et par af dem er rigtige.

Hvis de godkendes af din, så vil jeg meget gerne se din kode.

mvh
Thomas
Avatar billede vision-jsp Nybegynder
28. oktober 2002 - 08:12 #21
Hej Thomas

Jeg har nu været i kontakt med Jyske Bank, som er den bank vi på det projekt jeg arbejder på lige nu bruger til bankoverførsler. Han siger at de forskellige banker selv vælger hvilket check de vil bruge på kontonumrene. Det er derfor ikke muligt at lave et entydigt check på kontonumre. Han mener heller ikke at de må udlevere "koden" for de enkelte banker. Det som de i Jyske Bank gør, er at tilbyde kunderne, at de kan sende kontonumrene ind til dem og få dem checket.

Så summa summarum: det er nok svært at få valideret dine kontoumre...
28. oktober 2002 - 20:21 #22
Tak for det, vision! Det forklarer selvfølgelig hvorfor der er så mange, som ikke passer ind i kontrollen.

Jeg forstår dog stadig ikke hvordan PC-bankerne kan kontrollere koden!!

Jeg prøver lige at checke op på din forklaring og vender tilbage og uddeler point (trods den triste svar :o)

Der går måske et par dage !

/Thomas
Avatar billede vision-jsp Nybegynder
28. oktober 2002 - 22:17 #23
Hej

Bankerne kan selv checke kontonumre fordi de udveksler de forskellige check indbyrdes. De er bare ikke interresseret i at udlevere disse kodebeskrivelser til trediemand.
06. november 2002 - 23:05 #24
Hov, jeg havde da helt glemt, at jeg havde dette spørgsmål åbent.

Her får I lige nogle points.

Tak for hjælpen, selvom den ikke var til så meget andet end at kaste håndklædet i ringen og opgive tanken.

/thomas
Avatar billede eldblom Nybegynder
01. november 2007 - 10:56 #25
Efter at have læst ovenstående diskussion besluttede jeg mig for at kontakte finansrådet. Her er deres svar:

> Tak for din henvendelse om pengeinstitutternes registrerings- opg kontonumre.
>
> Der er ikke sektorfælles regler for længden af et kontonummer - det varierer således
> fra pengeinstitut til pengeinstitut.
> Et registreringsnummer er derimod altid på 4 cifre.
>
> Information om pengeinstitutternes registrerings- og kontonumre kan findes i
> Modulusregisteret, der kan erhverves ved henvendelse til PBS.
>
> Moduludregisteret indeholder intervaller med pengeinstitutternes registrerings- og
> kontonumre. Til hvert interval er der tilknyttet en specifik
> modulusberegningsmetode.
> Modulusregisteret indeholder derudover oplysning om kontonummerlængede m.v.
>
>
> Med venlig hilsen
>
> Birgitte Mikkelsen

Håber det kan hjælpe nogen :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester