Zum Inhalt springen

EC-Karte und Luhn-Alogrithmus


UlliTD

Empfohlene Beiträge

Hallo,

ich lese aus einer EC-Karte BLZ, KtoNr und Prüfziffer aus...

Nun sollte mit einem kleinen Programm ja über den Luhn-Algo festgestellt werden können, ob BLZ und KtoNr richtig ausgelesen wurden...

Sub test(strPruefen As String)

Dim x&, z&

Dim erg As Long

Dim odd As Boolean


    For x = Len(strPruefen) To 1 Step -1

        If odd Then

            z = Mid(strPruefen, x, 1) * 2

            If z >= 10 Then

                erg = erg + (z - 9)

            Else

                erg = erg + z

            End If

        Else

            erg = erg + Mid(strPruefen, x, 1)

        End If

        odd = Not odd

    Next


    Debug.Print erg


End Sub

das "erg" müßte eigentlich dann eine durch 10 teilbare zahl sein.

Das klappt bei mir aber nicht.

Den Gesamtstring setze ich aus BLZ & KtoNr & Prüfziffer zusammen.

Nu hab ich noch gelesen, daß es für debit-Karten etwas anders sein soll... Aber wie!? Das verstehe ich nicht.

kommt da jemand draus klug?

Danke!!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

die variable odd wird mit dim odd as boolean automatisch auf false gesetzt.

ja, die modulo operation fehlt noch. aber das ändert nix daran, daß "erg" eigentlich eine durch zehn teilbare zahl ohne rest ergeben müßte...

mit dem artikel hab ich auch schon geguckt...

da versteh ich aber den satz nicht ganz weiter unten:

Anwendung bei EC Karten [bearbeiten]

Bei EC Karten (Kredit/Debit) unterscheidet sich die Berechnung der Nummer geringfügig. Da die Prüfziffer im Magnetstreifen nur einstellig sein darf, wird aus einer Zahl, die auf "0" endet, eine "0"(10=0,20=0 usw).

Außerdem wird jede zweite Zahl, ausgehend von der ganz rechten (statt der zweiten von rechts) verdoppelt (1010 wird zu 1010, 0101 wird zu 0202).

Oder ich bekomme zumindest kein sinnvolles ergebnis einfach.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Sorry, aber Du brauchst doch nur den Code, der als Beispiel dort angegeben ist, so umschreiben. Man geht von rechts nach links durch den String, multipliziert in Abhängigkeit von der Parität und der Position die entsprechende Stelle mit 2 und summiert dann über die Modulo und Restdivision auf. Natürlich solltest Du beachten, wie die Indizes in Deinem Code laufen bzw wie sie in dem Wikipediaartikel angegeben sind.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also für Kreditkarten scheint mein Code (zumindest bei drei Karten zu stimmen)...

Aber für EC klappt es nicht!

Gemäß der Beschreibung bei Wiki muß ich mit der ganz rechten Stelle anfangen zu verdoppen. Was kein Problem ist... und dann jede zweite. Klar soweit.

Was ist mit dem Satz das aus einer Zahl die auf 0 endet eine Null wird *grübel* 9*2 sind 18 also kann eine "20" gar nicht entstehen. Oder worauf bezieht sich das!?

und die vorletzte Codezeile kapier ich auch nicht.

denn da wird aus der Berechnung immer 10 als Ergebnis.... kann ja nich sein^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine Konkrete Antwort wär mir lieber als die info das etwas wo steht.

Du hast schon einen konkreten Hinweis bekommen:

Natürlich solltest Du beachten, wie die Indizes in Deinem Code laufen bzw wie sie in dem Wikipediaartikel angegeben sind.

Du wirfst hier Deinen Code hin und sagst "läuft nicht" und möchtest, dass Dir jemand einen lauffähigen Code liefert bzw. Deinen so korrigiert, dass er funktioniert. Wenn Du das möchtest, dann erfasse bitte in der Börse einen entsprechenden Auftrag mit entsprechender Bezahlung.

In dem Wikipediaartikel ist der Algorithmus in fünf verschiedenen Programmiersprachen angegeben. Du musst davon lediglich eine anschauen, ggf. Dir mal jeden Schritt aufschreiben und dann eben passend in Deiner Sprache umsetzen, damit Du es selbst hin bekommst. Nimm' im Notfall mal eine Nummer, berechne das Ergebnis per Hand anhand des Wikipediaartikels und programmiere dann entsprechend. Alternativ kannst Du auch den Code von dort nehmen und gegen Deinen laufen lassen, mit Hilfe eines Debuggers kannst Du Dir jeden Schritt anschauen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

jepp. und genauso bin ich vorgegangen. also stimmt entweder mit der codevorgabe etwas nicht, oder mit meinem verständnis. wie schon erwähnt, den code habe ich ja entsprechend übersetzt und mit kreditkarten funktioniert er auch.

und ich habe hier auch eine konkrete frage gestellt, nämlich wie der text mit den 10=0 und 20=0 zu verstehen ist, wo 20 gar nicht auftauchen kann bei 2x9 als maximum.

klar kann ich mir die hilfe auch kaufen. aber darum gibt es ja foren, damit man mal ein problem mit anderen besprechen kann. und wie ich hier hilfe bekomme gebe ich meine erfahrungen auch weiter, wenn nicht hier dann anderswo...

da kreditkarten also funktionieren kann mein code kaum gänzlich falsch sein. und weder die initialisierung noch die abfolge ....

was soll angeblich anders sein bei debit karten!?

1. es beginnt mit der verdoppelung statt erst an zweiter stelle zu stehen und

2. 10 und 20 etc. soll gleich 0 sein.

und 2. verstehe ich schon mal gar nicht....

ich habs probiert. und da wo 10 (also 1+0 =1) rauskommen sollte normalerweise wird eben 0 eingetragen zur addition...

was auch nciht da steht ist die reihenfolge der nummernzusammensetzung ....

BZL + Kto + Prüffziffer? oder umgekehrt? mit führenden nullen der kontonummer oder ohne? (wobei das bei einer bestimmten anzahl an 0-stellen auch unwichtig ist, da sich mit doppelter nullzahl nix ändert. also ob da zwei oder sechs nullstellen sind, ist irrelevant.

woran liegt es also!?

und da komm ich eben nicht weiter.

Link zu diesem Kommentar
Auf anderen Seiten teilen

und ich habe hier auch eine konkrete frage gestellt, nämlich wie der text mit den 10=0 und 20=0 zu verstehen ist, wo 20 gar nicht auftauchen kann bei 2x9 als maximum.

Schau Dir die Modulo Operation an bzw. Restklasse , das sollte die Frage beantworten. Außerdem noch einmal der Hinweis, lies Dir Deinen und den C# Code auf der Wikipedia Seite durch und überprüfe die Laufindizes und Deine "odd" Variable (siehe: if (odd == false))

Lies vor allen mal Deinen Code, Befehl für Befehl und schau Dir die Beispielcodes dazu an !!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

also entweder hast du einen konkreten hinweis, dann erwähne ihn. aber las bitte diese ratespiele.^^ wir sind hier nicht in der schulklasse....

und wenn ich sage, daß bei kreditkarten der code funktioniert, kann es wohl nicht an "odd" liegen... man möge mir bitte zubilligen, daß ich die reihenfolge ob mit 1 oder 2 (von hinten) begonnen wird schon verändern kann....

Also:

wenn Du einen konkreten hinweis hast, freue ich mich riesig.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich lese aus einer EC-Karte BLZ, KtoNr und Prüfziffer aus...

du bist dir sicher, das du das richtige ausliest?

Nicht falsch verstehen.

Wir haben mal die EC-Karten für ne Zutrittssteuerung benutzt. Und dabei feststellen dürfen das BLZ + Kontonummer nicht bei alle KArten an der gleichen Stelle steht.

IMHO wars Spur 3 und die beiden infos varieieren je nach typ (EC-Karte / Debit Karte / Kredit Karte) einfach um nen par Byte vor oder zurück.

Nicht das du den Punkt hast wo die Kreditkarten infos stimmen aber eben die EC-Karten nicht. Weil dann kann man mit den "falschen" infos lange rumrechnen. ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

ja, weil für die testphase des codes habe ich den manuell eingegeben von meinen debitkarten. da ich meine kontonummern und bankleitzahlen kenne, dürfte das nicht das problem sein. allenfalls die prüfziffer könnte theroetisch falsch sein, da sie auf der karte aber direkt hinter der kontonummer angegeben ist, und diese bei einem auslesevorgang richtig drinne steht, sollte die prüfziffer auch richtig sein....

das ergebnis der summe der zahlen muß eine zahl ergeben, die durch zehn teilbar ist ohne rest, richtig? oder anders ausgedrückt, ist die letzte stelle der zahl eine 0, stimmt es .... richtig? 35 als summe kann also nicht stimmen....

Bearbeitet von UlliTD
Link zu diesem Kommentar
Auf anderen Seiten teilen

also entweder hast du einen konkreten hinweis, dann erwähne ihn. aber las bitte diese ratespiele.^^ wir sind hier nicht in der schulklasse....

Ich habe Dir mehrere Hinweise gegeben, dass Dein Code semantisch von dem Code, der bei Wikipedia zu sehen ist, abweicht. Ich gehe mal davon aus, dass der Code bei Wikipedia korrekt ist, so dass eben Fehler in Deinem Code zu finden sind, da Du aber anscheinend nicht Deinen Code einmal semantisch überprüfen willst, kann man Dir eben nicht helfen.

Vielleicht solltest Du erst einmal überlegen, was der Algorithmus überhaupt macht: Nur weil Du bei manchen Eingaben ein korrektes Ergebnis bekommst, bedeutet das noch lange nicht, dass Dein Code korrekt (nach Definition) ist. Du hast hier eine Hashfunktion, d.h. Du unterliegst allen Strukturen, die eben für das Hashing gelten.

das ergebnis der summe der zahlen muß eine zahl ergeben, die durch zehn teilbar ist ohne rest, richtig? oder anders ausgedrückt, ist die letzte stelle der zahl eine 0, stimmt es .... richtig? 35 als summe kann also nicht stimmen....

Nein muss es nicht, so ist diese Aussage falsch. Ich gebe Dir noch einmal den Hinweis, dass Du einmal bitte einen Beispielcode von der Wikipedia-Seite nimmst und ihn mit (!) Debugger laufen lässt und Dir in jedem Iterationsschritt einmal die Berechnung anschaust. Das gleiche machst Du mit Deinem Code und dann vergleichst Du beides, wobei in beiden Fälle identische Eingabe erfolgen muss.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...