First version of flicker code test program
authorMichael Schierl <schierlm@gmx.de>
Sat, 16 Jan 2010 19:03:00 +0000 (20:03 +0100)
committerAndreas Schiermeier <andreas@schiermeier.name>
Sun, 25 Oct 2015 13:51:50 +0000 (14:51 +0100)
commit3396d481f3a4b26900f09c41b9c9ef39759b9a9f
tree34650209ee64d5b0dd57cc4d02ee4b2a27f60c65
parent56d93bb63c735077e73bbde89e8a5d882a92ffac
First version of flicker code test program

From the original description (in German):

Ich schau mir gerade die Videoaufnahmen von diversen 26C3-Vorträgen an
(physisch anwesend war ich leider nicht) und bei den Lightning Talks hab
ich deinen Talk gesehen, wo du nach der Prüfsumme fragst.

Meine Theorie (die auch bei allen bis auf einer deiner angegebenen
Nummern stimmt) ist, dass hier eine Variation des wohl am häufigsten
benutzten Prüfziffernverfahren im Einsatz ist, das unter anderem für
Kreditkartennummern und z. T. auch für Kontonummern oder Matrikelnummern
genutzt wird, und das sich am einfachsten als "jede zweite Stelle
verdoppeln, dann Quersummen addieren" beschreiben lässt.

Genauer:

1. Klartextdaten extrahieren (also ASCII als ASCII und BCD als Zahlen).

Aus "11048718108705379090700F14362C30309B" wird so
"87181087 379090700 6,00"

2. Alle Zeichen die keine Zahlen sind rauswerfen:

87181087379090700600

3. Wenn die Zahl der Stellen ungerade ist, vermutlich als erste oder als
letzte Stelle (oder irgendwo in der Mitte) eine 0 anfügen. Leider war
bei allen angegebenen Codes die Stellenanzahl gerade.

4. Die Stellen separat schreiben und jede zweite Stelle verdoppeln.

8 14 1 16 1 0 8 14 3 14 9 0 9 0 7 0 0 12 0 0

5. Die Quersummen aller Zahlen addieren (alternativ alle Ziffern
addieren, läuft aufs Selbe raus):

8+1+4+1+1+6+1+0+8+1+4+3+1+4+9+0+9+0+7+0+0+1+2+0+0 = 71

6. Die Prüfziffer addieren: 71 + 9 = 80

7. Das Ergebnis ist glatt durch 10 teilbar wenn die Prüfziffer richtig
ist.

Ich hab meine Testklasse (in Java implementiert) mal angehängt,
vielleicht kannst du sie brauchen.

Diese Methode stimmte nicht bei
"0604800269582A" (es hätte "0604800269581A" sein müssen).
Vielleicht wurde der aber auch einfach nur falsch abgeschrieben?

Zum Vergleich: Die XOR-Prüfziffer stimmte, wenn ich sie richtig
implementiert habe, bei 2 Codes nicht: "06048002695658" (statt
"06048002695654") und "06048002695739" (statt "06048002695735").

Hoffe das hilft weiter,
chiptan/code/FlickerCode.java [new file with mode: 0644]