member of the work
 
  Home | Studium | Programming | Games | Links | About Me | eMail
Download
Der Java-Quellcode ist für Interessierte verfügbar. Leider habe ich nix kommentiert, bei ca. 130 Zeilen sollte das auch nicht weiter problematisch sein.
Der Euro kommt !
Natürlich wird auch die neue Währung ein Sicherungssystem verwenden. Ob dies wieder eine Variante der Dieder-Gruppen ist, kann ich nicht sagen, da ich noch keinerlei Informationen über die Euro-Geldscheine besitze.
Literaturhinweis
Eine sehr interessante Quelle war die Computerzeitung  c't 04/1997, S. 448.
Die erste Anregung kam aus der Vorlesung Diskrete Strukturen von Prof. Budach in meinem ersten Studiensemester.
navigator: home programming Geldscheintester

Der Geldscheintester
Gleich zu Beginn sollte hier nach wenigen Sekunden ein Java-Applet erscheinen. Falls es das nicht tut, so ist entweder  Java nicht installiert (eher unwahrscheinlich) oder aus Sicherheitsgründen deaktiviert.

Einige unsaubere Java-Implementierungen (insbesondere von Netscape) erzeugen Fehler beim Laden des Applets, weil sie nicht vorhandene JavaBean-Konfigurationen abfragen. Ich arbeite daran, das Problem zu lösen.

Ansonsten hier einfach die Seriennummer eingeben, mein letzter Hunni hat z.B. GG6909287Z5 (man beachte, dass die ersten beiden Symbole Buchstaben sind, ebenso das vorletzte), Groß-/Kleinschreibung spielt keine Rolle:


Mit einem ordentlichen Zeichenprogramm, einem guten Drucker nebst Baumwollpapier, Geduld und viel krimineller Energie läßt sich heutzutage Papiergeld auch im Wohnzimmer fälschen. Von allzu offensichtlichen Kopien abgesehen, gibt es nicht wenige, die sich die Mühe machen, "fortlaufende" Seriennummern zu implementieren.

Diese haben jedoch eine eingebaute Sicherung: die letzte Ziffer ist eine Prüfziffer, anhand deren sich die Gültigkeit der 10 vorangegangenen bestimmen läßt. Dass dies recht zuverlässig funktioniert, erkennt man sofort, wenn man nach Belieben einige Zahlen bzw. Buchstaben verändert. Die zur Bestimmung der Prüfziffer verwendete Methodik gewährt Einblicke in die Diskrete Mathematik mit ihren Permutationen und Dieder-Gruppen.

Prüfziffern
Der Ursprung der Prüfziffern liegt in der Kontrolle von Zifferncodes, die Verfälschungen unterliegen können. Denkbare Störquellen sind menschliche Tippfehler, wie z.B. Zahlendreher, aber auch Signalrauschen, das zu optischen oder akustischen Mißinterpretation führt.

Sehr einfache Verfahren beruhen auf modulo-10-Operationen. Häufig benutzt wird der Rest der Division der 10 der Quersumme des Zahlencodes. Somit fallen Einzelfehler (z.B. "5" statt "6") auf, Zahlendreher werden aber nicht entdeckt. Bessere modulo-10-Verfahren schaffen auch das, aber mathematisch ist es erwiesen, daß sie nie alle Einzelfehler und Zahlendreher erkennen können.

Die ISBN-Nummern von Büchern werden auch durch eine modulo-prüfziffer abgesichert, hier kommt aber eine spezielle modulo-11-Technik zum Zuge, die alle Einzelfehler und Zahlendreher zuverlässig erkennen kann. Nur ist damit auch ein elftes Symbol notwendig und der Ziffernvorrat reicht damit nicht mehr aus. Die Zuhilfenahme des "X" behebt dieses Problem, doch nicht immer kann man solche Lösungen implementieren. Der andere mögliche Weg, alle Zahlencodes, die das elfte Symbol als Prüfziffer hätten, auszuschließen, war indiskutabel, da dies 10% des Zahlenraumes vernichten würde. Bei 12 verwendeten Ziffern, wären 1,2 "überflüssig", also wären dann auch 2-stellige Prüfziffern überlegenswert.

Dieder-Gruppen
Das Fünfeck als Ausgangsbasis Neben der modulo-10-Addition gibt es noch eine weitere Gruppe, die auf den 10 Ziffern operiert: die Diedergruppe D5 (sprich:"Di-eder"). Diedergruppen entstehen aus geometrischen Transformationen, die n-Ecke auf sich selbst abbilden. Die D5-Gruppe bezieht sich somit auf 5-Ecke, die durch 5 Rotationen und 5 Spiegelungen insgesamt 10 Abbildungen ergeben. Es werden den Rotationen die Ziffern 0 bis 4 und den Spiegelungen 5 bis 9 zugeordnet. Somit ist 0 das Einselement, das inverse Element ist für 0<n<5 das Element 5-n und für n>4 ist es n.

Das interessante an dieser Gruppe ist, dass sie nicht kommutativ (also nicht abelsch) ist. Ein Beispiel hierfür ist: 1*6=7 aber 6*1=5. Diese Eigenschaft ist gerade für die Erkennung von Zahlendrehern enorm wichtig.

Auf Geldscheinen findet man genau diese Technik wieder. Hierbei wird die Prüfziffer derart gewählt, dass die Dieder-Verknüpfung aller Stellen stets 0 ergibt. Die Buchstaben dienen ebenfalls der Absicherung gegen Fehler, besonders der letzte verhindert Dreher der letzten beiden Positionen. Dies ist unbedingt notwendig, da es, obwohl D5 nicht abelsch ist, ein paar Elemente gibt, für die doch wieder a*b=b*a gilt. Zum Überlick hier die Bedeutungen der Buchstaben:

ADGKLNSUYZ
0123456789

Die Verknüpfungstabelle sieht folgendermaßen aus:

*012 34567 89
00123456 789
11234067 895
22340178 956
33401289 567
44012395 678
55987604 321
66598710 432
77659821 043
88765932 104
99876543 210

Wie bereits erwähnt, gilt für einige Elemente das Kommutativgesetz. Um aber Zahlendreher zu unterbinden, werden die einzelnen Ziffern (bzw. die zugeordneten Buchstaben) permutiert, d.h. vertauscht. Eine Permutation, die dies leistet, ist p = {1, 5, 7, 6, 2, 8, 3, 0, 9, 4} (in der Bedeutung, dass p(1)=1, p(2)=5, p(3)=7 usw.). Sie ist gleichzeitig in der Lage, phonetische Fehler, wie 14 statt 40, zu erkennen. Es gibt noch diverse andere Permutationen, die das gleiche leisten, sie werden meist durch Probieren gefunden.

Die Permutationen lauten dann:

p1 = {1, 5, 7, 6, 2, 8, 3, 0, 9, 4}
p2 = p(p1) = {5, 8, 0, 3, 7, 9, 6, 1, 4, 2}
p3 = p(p2) = {8, 9, 1, 6, 0, 4, 3, 5, 2, 7}
p4 = p(p3) = {9, 4, 5, 3, 1, 2, 6, 8, 7, 0}
p5 = p(p4) = {4, 2, 8, 6, 5, 7, 3, 9, 0, 1}
p6 = p(p5) = {2, 7, 9, 3, 8, 0, 6, 4, 1, 5}
p7 = p(p6) = {7, 0, 4, 6, 9, 1, 3, 2, 5, 8}
p8 = p(p7) = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
p9 = p(p8) = {1, 5, 7, 6, 2, 8, 3, 0, 9, 4}
p10 = p(p9) = {5, 8, 0, 3, 7, 9, 6, 1, 4, 2}
p11 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

Es ist unschwer zu erkennen, dass aufgrund der besonderen Struktur von p8 auch p9 = p1 gilt usw. Eine kleine Variation hat sich die Deutsche Bundesbank noch bei der letzten Stelle der Seriennummer einfallen lassen, sie wird nicht permutiert.

Mit diesem Wissen ist es jetzt möglich, die Seriennummer eines deutschen Geldscheines auf seine Gültigkeit hin zu überprüfen. Nimmt man den eingangs erwähnten Hunderter, so bedeutet seine Seriennummer
GG6909287Z5
nach Ersetzung der Buchstaben
22690928795
und Permutation aller Stellen
70304548025

Nun verknüpfe ich die Ziffern miteinander, beginnend von links:
7*0*3*0*4*5*4*8*0*2*5=0
da 7*0=7, 7*3=9, 9*0=9, 9*4=5, 5*5=0, 0*4=4, 4*8=7, 7*0=7, 7*2=5, 5*5=0.

Weil die Verknüpfung 0 ergeben hat, ist die Seriennummer gültig und der Geldscheinschein entweder echt oder eine richtig gute Fälschung. Doch bevor ich mir darüber zu sehr den Kopf zerbreche, fahre ich lieber schnell zu Mediamarkt und kaufe ich mir mit dem Hunderter ein paar neue Musik-CDs.
   suche:
Zurück Sitemap Zu Favoriten hinzufügen
Translate
eMail   
Copyright © 1999 -2024 Stephan Brumme
all brand names and product names included in this site are trademarks, registered trademarks
or trade names of their respective holders. refer legal issues / impressum for further details or just contact me.
last update: Tuesday, November 20th, 2001, 9:52pm. 29.0 kbytes generated in 0.003 seconds  .
 
This web site flies with a homegrown content management system. No animals were harmed while writing it.