Dekodierung von Codes: (Stand: 10.07.02)

(Numerierung entspricht den Schritten bei Fichtner):

Eine schöne graphische Übersicht über den gesamten Algorithmus an sich findet man bei Herbert Fichtner!

Nachdem Sie dieses Dokument etwas verstanden haben, möchten Sie vielleicht das
(nicht so kleine)
JavaScript-Programm ausprobieren, das den Dekodierungsprozess simuliert.
Da es ca. 98 K groß ist, können Sie es
downloaden als selbstextrahierende EXE-Datei (nur für DOS oder Windows, ca. 15 K).

Schritt 1 (trivial):

Falls die Code-Zahl (Showview, VCRPlus, Videoplus) 9-stellig ist, die erste Stelle abtrennen und als Zahl "Minutendifferenz" merken/notieren. Falls die erste Stelle größer ist als 5 (dann "sitzt" das sogenannte Kanal-Bit, bei dem die Kanalzahl um 193 erhöht wird), von ihr 5 abziehen und das Ergebnis als Zahl "Minutendifferenz" merken/notieren, nicht vergessen, die erste Stelle wegzuwerfen (eine solche Codezahl gibt es bisher in Deutschland nur selten, z. B. bei Phoenix, Leitzahl 206. Eine Dekodierung ist für diese Fälle bisher auch nicht möglich!).
Falls die Code-Zahl jetzt führende Nullen hat, diese einfach wegwerfen (können bis zu 7 Stück sein!) und den Rest als Code-Zahl nehmen und damit weiterarbeiten.

Falls die Code-Zahl (von vornherein oder nach Abtrennung der 1. Stelle und einer eventuellen führenden Null) 7- oder 8-stellig ist: Pech gehabt! Zur Zeit können diese Zahlen noch nicht dekodiert werden! Aber es wird daran gearbeitet.

Sinnloses Beispiel: Code-Zahl 305-682-975 ("Abendvorschau", 1.5.2000, 19:58 Uhr, ARD, Dauer2 Minuten), 1. Stelle "3" abtrennen und merken/notieren, Code-Zahl heißt jetzt 05-682-975, führende Null wegwerfen, Code-Zahl ist jetzt 5-682-975. Die Code-Zahl ist 7-stellig und damit zur Zeit (noch) nicht dekodierbar. VERZWEIFLUNG!

Sinnvolles Beispiel: Code-Zahl 300-074-598 ("Wunschbox", 2.5.2000, 14:03 Uhr, ARD, Dauer 57 Minuten), 1. Stelle "3" abtrennen und als "Minutendifferenz" merken/notieren, Code-Zahl heißt jetzt 00-074-598, führende Nullen wegwerfen, Code-Zahl ist jetzt 74-598 und damit 5-stellig. Glück gehabt, wir können weitermachen.

Schritt 2:

Nun wird aus der Code-Zahl eine ebensolange neue Zahl errechnet. Bei mindestens einer führenden Null muß das Verfahren wiederholt werden, damit die Länge erhalten bleibt! Die letzte Stelle bleibt übrigens immer erhalten!

Hierzu gibt es zur Zeit drei verschiedene Verfahren, die aber alle zum selben Ergebnis kommen, falls man richtig rechnet.:

[Shiriff/Welch/Kinsman] Multiplikation (modulo 10, s. obigen Hinweis) mit dem sogenannten "key" 68150631.

Code-Zahl 74-598

74598 * 68150631
24048
_62024
__74598
___50550
____00000
_____24048
______12574
_______74598
============
xxxxxxx93038

[Fichtner] Die n-stellige Code-Zahl wird n-mal untereinander geschrieben, jedes Mal um eine Stelle nach links verschoben. Die Spalten werden (modulo 10) addiert. Dieses Verfahren wird noch zweimal wiederholt. Mathematische Formulierung

Code-Zahl 74-598

____74598
___74598
__74598
_74598
74598
=========
xxxx36278 (ergibt neue Zahl 36278)

____36278
___36278
__36278
_36278
36278
=========
xxxx63758 (ergibt neue Zahl 63758)

____63758
___63758
__63758
_63758
63758
=========
xxxx93038 (ergibt neuen Code 93038)

[Zelczak und Fichtner] Die letzte Stelle bleibt (wie oben bereits erwähnt) immer erhalten!
Also ist die letzte Stelle der neuen Zahl immer gleich der letzten Stelle der Code-Zahl.
Man addiert die vorletzte Stelle der Code-Zahl und die letzte Stelle der neuen Zahl (modulo 10), um die vorletzte Ziffer der neuen Zahl zu bekommen.
Nun addiert man die dritte Ziffer von rechts des Codes und die zweite Ziffer von rechts der neuen Zahl, um die dritte Ziffer von rechts der neuen Zahl zu bekommen.
Für die restlichen Ziffern wird ebenso verfahren.
Dieses Verfahren wird noch zweimal wiederholt.

Code-Zahl 74-598

5. Stelle neue Zahl = 8 8
4. Stelle = 9+8 = 7
3. Stelle = 5+7 = 2
2. Stelle = 4+2 = 6
1. Stelle = 7+6 = 3
neue Zahl =   36-278

Zwischenergebnis 36-278

5. Stelle neue Zahl = 8 8
4. Stelle = 7+8 = 5
3. Stelle = 2+5 = 7
2. Stelle = 6+7 = 3
1. Stelle = 3+3 = 6
neue Zahl =   63-758

Zwischenergebnis 63-758

5. Stelle neue Zahl = 8 8
4. Stelle = 5+8 = 3
3. Stelle = 7+3 = 0
2. Stelle = 3+0 = 3
1. Stelle = 6+3 = 9
neue Zahl =   93-038

Neue Code-Zahl: 93-038

Schritt 3:

Die rechten drei Stellen werden zuerst abgetrennt und dann um 1 verringert. Das Ergebnis nenne ich einfach mal "Bottom", die restlichen Stellen ergeben eine Zahl "Top".

Code-Zahl 93-038
Bottom = 38 - 1 = 37
Top = 93

Schritt 4:

Aus der Zahl Bottom errechnet man den Tag im Monat durch den ganzzahligen Anteil bei der Division durch 32 (normale Division) und anschließende (normale) Addition mit1. Der Rest der Division wird in die Zahl Rem gespeichert

Bottom 37
Tag = 37 / 32 = 1 + 1 = 2
Rem = Rest von 37/32 = 5

Schritt 5:

Im Videorekorder oder in der speziellen Showview-Fernbedienung läuft eine Uhr mit, die den aktuellen Tag, Monat und das aktuelle Jahr für die Berechnung (Schritt 5 und 6) liefert.Monat und Jahr sind also nicht Bestandteil des Codes!
Ist der aus dem Code berechnete Tag kleiner als der aktuelle Tag, so wird angenommen, dass der nächste Monat gemeint ist.

Berechnung zweier neuer Zahlen "Newtop" und "Offset" aus der Zahl "Top" aus Schritt 3.

[Shiriff/Welch/Kinsman] Zuerst werden alle Ziffern der Zahl Top aufeinanderaddiert in die Zahl Offset.
In einer Schleife wird eine Funktion "map_top" aufgerufen, deren Rückgabewert (modulo 10) auf Offset aufaddiert wird (diese Addition ist normal!).
Der Rest der zweistelligen Jahreszahl modulo 16 (um 1 erhöht) ergibt die Anzahl der benötigten Schleifendurchläufe.
In der Funktion "map_top" wird die Zahl Top ziffernweise mit Ziffern multipliziert, die sich aus zum Teil mehreren Faktoren errechnen, die wiederum vom Jahr modulo 16 abhängen.
Zum Schluß wird "map_top" nochmals durchlaufen. Das Ergebnis wird (normal und nicht modulo etc.) in die Zahl Newtop übernommen.
Falls Newtop weniger Stellen hat als Top, so wird das alles nochmals durchlaufen, bis beide gleich lang sind.
Offset wird modulo 32 berechnet!
Wer dieses Verfahren nachvollziehen will, sei auf die Originalausarbeitung verwiesen.

Ein Beispiel schenke ich mir, da einerseits dieses Verfahren sehr komplex ist und andererseits die beiden anderen Verfahren wesentlich einfacher sind.
Auf jeden Fall ergibt sich (zur Kontrolle der beiden anderen Verfahren): Newtop = 14 und Offset = 16.

[Fichtner] Zuerst werden alle Ziffern der Zahl Top aufeinanderaddiert in die Zahl Offset.
Die letzte Stelle des Tages aus Schritt 4 wird hingeschrieben und rechts daneben die Ziffern der Zahl Top.
Dann schreibt man alles darunter, nur diesmal um eine Stelle nach rechts verschoben.
Dies wiederholt man, bis soviele Zeilen untereinanderstehen wie Anzahl Stellen der Zahl Top und eine weitere Zeile.
Die Spalten werden (modulo 10) addiert. Von dem Resultat werden ab der 2. Stelle nur so viele Stellen wie die der Zahl Top benutzt
Der Rest der zweistelligen Jahreszahl modulo 16 (um 1 erhöht) ergibt die Anzahl der benötigten Durchgänge.
Das Ergebnis des letzten Durchganges wird in der Zahl Newtop gespeichert.
Die letzte Stelle eines jeden Durchganges wird (normal!) auf die Zahl Offset draufaddiert.
Falls Newtop weniger Stellen hat als Top, so wird das alles nochmals durchlaufen, bis beide gleich lang sind.
Offset wird modulo 32 berechnet!
Mathematische Formulierung

Top = 93, Tag = 2. Jahr = 00 (nur letzte beide Stellen zählen!)
Jahr modulo 16 = 0, also wird der Vorgang einmal durchgeführt.

293 (Tag und Top)
_293
__293
=====
214xx
(also Newtop = 14)
(Falls weitere Durchgänge nötig sind, wird mit dieser Zahl 14 weitergerechnet!)

Offset = (normale Addition der Ziffern aus Top) 9 + 3 = 12
Auf Offset werden die unterstrichenen Ziffern aufaddiert.
Offset = 12 + 4 = 16

[Zelczak und Fichtner] Der Rest der zweistelligen Jahreszahl modulo 16 (um 1 erhöht) ergibt die Anzahl, wie oft der folgende Prozess durchgeführt werden muß.

Zuerst werden alle Ziffern der Zahl Top aufeinanderaddiert in die Zahl Offset.

Man addiert die erste Stelle von Top und die letzte Stelle des Tages, um die erste Stelle der neuen Zahl zu bekommen (modulo 10).
Nun addiert man die zweite Stelle von Top auf die erste Stelle der neuen Zahl (modulo 10), um die zweite Stelle der neuen Zahl zu erhalten.
Für die restlichen Stellen verfährt man sinngemäß.
Man addiert die letzte Stelle der neuen Zahl (normal) auf Offset.

Das Ergebnis des letzten Durchganges wird in der Zahl Newtop gespeichert.
Die Zahl Offset wird modulo 32 berechnet!
Falls Newtop weniger Stellen hat als Top, so wird das alles nochmals durchlaufen (diesmal mit Newtop als Ausgangszahl), bis beide gleich lang sind.

Wir nehmen an, dass die Uhr des Videorekorders auf dem 1.5.2000 steht.
Top = 93, Tag = 2. Jahr = 00 (nur die letzten beiden Stellen zählen!)
Offset = (normale Addition der Ziffern aus Top) 9 + 3 = 12

Jahr 00 modulo 16 = 0, also wird der Vorgang einmal durchgeführt.

Erste Stelle neue Zahl = 9 + 2 (Tag) = 1
Zweite Stelle neue Zahl = 3 + 1 = 4
Offset = 12 + 4 = 16
Neue Zahl = 14

(also Newtop = 14)

(Nur falls ein weiterer Vorgang nötig sein sollte, wird mit der neuen Zahl 14 weitergerechnet, also:
Erste Stelle neue Zahl = 1 + 2 (Tag) = 3
Zweite Stelle neue Zahl = 4 + 3 = 7
Neue Zahl = 37
Offset = 16 + 7 = 23, etc.)

Schritt 6:

Berechnung einer neuen Zahl "Top2" aus Bottom, Tag, Monat und Offset.
Top2 = (Rem + Tag * (Monat+1) + Offset) modulo 32

Rem 5, Tag = 2, Monat = 5, Offset = 16
Top2 = (5 + 2 * (5 + 1) + 16) = 33 (modulo 32) = 1

Schritt 7:

Die Zahlen Newtop und Top2 werden in Bits zerlegt. Newtop ist je nach Land unterschiedlich. Die z-Bits stehen für Zeit und Dauer, die k-Bits für Kanal.

Überall: Top2 (5 Bits) = z2 k1 z1 k0 z0

Newtop (10 Bits)
Deutschland: z9 k4 k3 z8 z7 z6 z5 z4 z3 k2
USA: z8 k5 z7 k4 z6 z5 z4 k3 z3 k2
Großbritannien: z10 z9 z8 z7 z6 z5 z4 k3 k2 z3

Die z-Bits werden in der Folge z9 (USA: z8, UK: z10) bis z0 nebeneinandergestellt und in dezimal umgerechnet ("Zeit-Index") und die k-Bits in der Folge k4 (USA k5, UK: k3) bis k0 ebenso nebeneinander und zu "Leit-Kanal" in dezimal umgerechnet und danach 1 addiert. Zumindest für Deutschland gibt es zumindest eine Spezialregel wie: "Falls die dezimale Darstellung der k-Bits zwischen 19 und 31 liegt, wird nicht 1 sondern 81 addiert, um den Kanal zu bekommen.".

Beispiel (nur für Deutschland):
Top2 = 1 = binär 00001 (z2 k1 z1 k0 z0)
Newtop = 14 = binär
0000001110 (z9 k4 k3 z8 z7 z6 z5 z4 z3 k2)

Daraus ergibt sich für
Zeit-Index = 0000111001 = 57
Kanal = 00000 = 0 + 1 = 1

Schritt 8:

Der Leitkanal muß(te) mit dem Videorekorder oder dem Showview-Gerät irgendwann dem tatsächlichen Kanal auf dem Videorekorder zugeordnet werden.

Mit dem Zeit-Index wird auf die Tabelle der Zeiten und der Dauer zugegriffen.
Für jeden Tabelleneintrag gibt es eine Uhrzeit und eine Dauer.

Falls in Schritt 1 eine Minutendifferenz ermittelt wurde, so wird sie auf die Anfangszeit addiert und von der Dauer abgezogen.
War die erste von 9 Stellen größer als 5, so muß nun auf die Kanalzahl um 193 erhöht werden!

Beispiel (nur für Deutschland):
Zeit-Index = 57 = "Anfangszeit 14:00 Uhr, Dauer 60 Minuten"
Kanal = 1 = "ARD"

Tag = 2
Minutendifferenz 3, also ergibt sich "2.5.2000, Anfangszeit 14:03 Uhr, Dauer 57 Minuten, ARD"

Showview-Seite

Startseite

(http://www.zelczak.com/dekodier.htm)