| Gコードのデコードについて |
| 時3 | ch2 | 時2 | ch1 | 時1 |
| x | x | x | x | x |
と、いうふうになります。(これで、ch*4+時間のデータ*8の32パターンが作れます。)このようにして、対応表よりチャンネルと録画開始時間と録画時間がでてきます。以上のことより、3桁までは、年のデータは使わないことになり、毎年同じになります。
4、5桁では、基本パターンに、年のオフセットを足して、2進数に分解すると
| 時3 | ch2 | 時2 | ch1 | 時1 |
| x | x | x | x | x |
となり、さらに別のコード(ここではJJコードとしている)をもとめて、そのJJコードをビットごとに分離して
| 時7 | ch5 | 時6 | 時5 | ch4 | 時4 | ch3 |
| x | x | x | x | x | x | x |
というふうにして、対応表よりデコードできます。Gコードを作る場合は逆の操作をすれば作れます。
6〜8桁については、今のところデコードできません。6桁は、JJコードの計算がわかりません。別の方式かもしれません。
7、8桁は、年のデータが16パターンではなくなるので、今のところはわかりません。
JJコード
デコードは3桁を基準をしているので、4桁以上では、余った桁をもとにしてchや時間のデータを拡張するために作ったコードです。(とにかく、Gコードはいろいろなコードに変換しないとデコードできません。)
JJコードの計算は、
4桁の場合
(J4+日付*({年+1}mod 10))mod 10
5桁の場合
(J5+日付*({年+1}mod 10))mod 10 *10+
[(J4+J5*({年+1}mod 10)+
日付*({(年+1)*(年+2)}mod 10)]mod 10
(但し、J4,J5は順コードの4桁目と5桁目。年は、年のデータのパターンNO.。
mod x は、xで割った余り)
と、いうふうになります。
ただし、JJコードが4桁の場合は0、または5桁の場合10未満になるときは、JJコードを順コードとして以上の計算を繰り返します。
年のオフセット
やはり簡単にデコードされては困るのでしょうか。
年をもとにして、基本パターンの32パターン内で、年のオフセットというものを使ってローテートさせています。
まず、初期値としてオフセット値を、4桁の場合はJ4,5桁の場合はJ4+J5を入れておきます。(J4,J5は順コードの4,5桁目)
そして、年のパターンの回数+1回分、その年のパターンでJJコードを求めその総和をとって、32で割った余りを求めます。
年のデータ
Gコード3桁までは、年のデータは入っていません。したがって、3桁までは毎年同じになります。
Gコード4〜6桁までは、16のグループ内の年のGコードは、同じになります。
例えば、96年のGコードはパターンNO.8のグループ内の08,17,22,66,92年のGコードと同じです。
西暦(下2桁)年グループパターンNO.
| 0 | 03,19,21,40 | 52,54,98 |
| 1 | 13,31,35,47 | 76,89,95 |
| 2 | 05,14,27 | 53,69,71,90 |
| 3 | 10,18,44 | 63,81,85,97 |
| 4 | 25,30,38 | 55,64,77 |
| 5 | 01,20,36 | 60,68,94 |
| 6 | 16,42,46 | 75,80,88 |
| 7 | 00,41,49 | 51,70,86 |
| 8 | 08,17,22 | 66,92,96 |
| 9 | 06,07,09 | 50,91,99 |
| 10 | 11,15,43 | 58,67,72 |
| 11 | 12,24,34 | 56,57,59 |
| 12 | 29,32,37 | 61,65,93 |
| 13 | 23,28,33 | 62,74,84 |
| 14 | 02,04,48 | 79,82,87 |
| 15 | 26,39,45 | 73,78,83 |
規則性は、 | で半分に割れば、左半分の年をそれぞれ50を足すと、右半分の2つ下の年のデータになります。それくらいしか、今のところわかりません。
Gコード7、8桁は、規則性がわかりません。7、8桁は、Gコードが同じになる年はありません。
順コード
順コードは、私が勝手に名づけたコードです。
Gコードは、まず、この順コードに変換しないと解析が不可能です。
まず、1桁ずつに分解します。(G8からG1はGコード、J8からJ1は順コード)
Gコード12345678なら
G8 G7 G6 G5 G4 G3 G2 G1
1 2 3 4 5 6 7 8
Gコード345なら
G3 G2 G1
3 4 5
というように分解します。
それを、次の変換式で順コードにします。
J1 = G1
J2 = G2 - J1 * 7
J3 = G3 - J2 * 7 - J1 * 3
J4 = G4 - J3 * 7 - J2 * 3 - J1 * 9
J5 = G5 - J4 * 7 - J3 * 3 - J2 * 9
J6 = G6 - J5 * 7 - J4 * 3 - J3 * 9
J7 = G7 - J6 * 7 - J5 * 3 - J4 * 9
J8 = G8 - J7 * 7 - J6 * 3 - J5 * 9
ちなみに、この式は私が独自に出した式です。
上の式を、展開していくと、
J1 = G1 * 1
J2 = G2 * 1 + G1 * 3
J3 = G3 * 1 + G2 * 3 + G1 * 6
J4 = G4 * 1 + G3 * 3 + G2 * 6 + G1 * 0
J5 = G5 * 1 + G4 * 3 + G3 * 6 + G2 * 0 + G1 * 5
J6 = G6 * 1 + G5 * 3 + G4 * 6 + G3 * 0 + G2 * 5 + G1 * 1
J7 = G7 * 1 + G6 * 3 + G5 * 6 + G4 * 0 + G3 * 5 + G2 * 1 + G1 * 8
J8 = G8 * 1 + G7 * 3 + G6 * 6 + G5 * 0 + G4 * 5 + G3 * 1 + G2 * 8 + G1 * 6
となり、複雑になったように思えますが、この式の利点は、J1からJ8のデータを何度も取り出さなくてよいことと、かけている数の法則が見えることです。
かけている数を取り出すと、1,3,6,0,5,1,8,6となっていますが、初期値0として
+1して1、+2して3、+3して6、+4して10(下1桁のみ取り出して0、以下同)+5して5、+6して1、+7して8、+8して6となります。
つまり、上の式のわけがわからない7をかけたり、3をかけたりしていない(定数がいらない)ということです。
これを、利用すれば、仮に9桁のGコードさえ作ることができます。
J9 = G9 * 1 + G8 * 3 + G7 * 6 + G6 * 0 + G5 * 5 + G4 * 1 + G3 * 8 + G2 * 6 + G1 * 5
ただし、もっと簡略化できるかもしれません。
なお、桁数以上の式は使用しません。(例えば、3桁だと、J4からJ8の式は必要ありません。)
そして、桁数の上1桁(例えは、5桁の時はG5)が0になったときは、J8からJ1の値をG8からG1にいれて、もう一度上の式を実行します。(0にならないまで、繰り返します)
対応表
chのビット ch5 ch4 ch3 ch2 ch1 0 0 0 0 0 80ch 0 0 0 0 1 90 0 0 0 1 0 04 0 0 0 1 1 06 0 0 1 0 0 08 0 0 1 0 1 10 0 0 1 1 0 12 0 0 1 1 1 01 0 1 0 0 0 05 0 1 0 0 1 11 0 1 0 1 0 09 0 1 0 1 1 73 0 1 1 0 0 74 0 1 1 0 1 75 0 1 1 1 0 76 0 1 1 1 1 81 1 0 0 0 0 82 1 0 0 0 1 83 1 0 0 1 0 84 1 0 0 1 1 85 1 0 1 0 0 86 1 0 1 0 1 35 1 0 1 1 0 38 1 0 1 1 1 37 1 1 0 0 0 31 1 1 0 0 1 25 1 1 0 1 0 27 1 1 0 1 1 34 1 1 1 0 0 33 1 1 1 0 1 36 1 1 1 1 0 42 1 1 1 1 1 32 (以下続く) 時のビット(括弧内は録画時間(分)) 時5 時4 時3 時2 時1 0 0 0 0 0 午後 6:00(30) 0 0 0 0 1 午後 7:00(30) 0 0 0 1 0 午後 8:00(30) 0 0 0 1 1 午後 9:00(30) 0 0 1 0 0 午後10:00(30) 0 0 1 0 1 午後11:00(30) 0 0 1 1 0 午後 5:00(30) 0 0 1 1 1 午後 4:00(30) 0 1 0 0 0 午後 3:00(30) 0 1 0 0 1 午後 2:00(30) 0 1 0 1 0 午後 1:00(30) 0 1 0 1 1 午後 0:00(30) 0 1 1 0 0 午前11:00(30) 0 1 1 0 1 午前10:00(30) 0 1 1 1 0 午前 9:00(30) 0 1 1 1 1 午前 8:00(30) 1 0 0 0 0 午前 7:00(30) 1 0 0 0 1 午前 6:00(30) 1 0 0 1 0 午前 5:00(30) 1 0 0 1 1 午後 6:00(60) 1 0 1 0 0 午後 7:00(60) 1 0 1 0 1 午後 8:00(60) 1 0 1 1 0 午後 9:00(60) 1 0 1 1 1 午後10:00(60) 1 1 0 0 0 午後11:00(60) 1 1 0 0 1 午後 5:00(60) 1 1 0 1 0 午後 4:00(60) 1 1 0 1 1 午後 3:00(60) 1 1 1 0 0 午後 2:00(60) 1 1 1 0 1 午後 1:00(60) 1 1 1 1 0 午後 0:00(60) 1 1 1 1 1 午前11:00(60) (以下は時3〜時0まで0、詳細は時間のデータを参照してください) 時8 時7 時6 時5 時4 0 0 0 0 0 午後 6:00(30) 0 0 0 0 1 午後 3:00(30) 0 0 0 1 0 午前 7:00(30) 0 0 0 1 1 午後11:00(60) 0 0 1 0 0 午前10:00(60) 0 0 1 0 1 午後 8:30(30) 0 0 1 1 0 午後 1:30(30) 0 0 1 1 1 午前 5:30(30) 0 1 0 0 0 午後 7:00(54) 0 1 0 0 1 午後 9:00(45) 0 1 0 1 0 午後 0:00(45) 0 1 0 1 1 午後 6:45(15) 0 1 1 0 0 午後 3:45(15) 0 1 1 0 1 午前 7:45(15) 0 1 1 1 0 午後11:55(5) 0 1 1 1 1 午前10:55(5) (これ以下は6桁) 1 0 0 0 0 午後 8:00(15) 1 0 0 0 1 午後 1:00(15) 1 0 0 1 0 午前 5:00(15) 1 0 0 1 1 午後 4:30(15) 1 0 1 0 0 午前 8:30(15) 1 0 1 0 1 午後10:15(45) 1 0 1 1 0 午前11:15(45) 1 0 1 1 1 午後 7:45(45) 1 1 0 0 0 午後 2:45(45) 1 1 0 0 1 午前 6:45(45) 1 1 0 1 0 午後 5:00(90) 1 1 0 1 1 午前 9:00(90) 1 1 1 0 0 午後 9:15(15) 1 1 1 0 1 午後 0:15(15) 1 1 1 1 0 午後 6:50(10) 1 1 1 1 1 午後 3:50(10) (以下続く)
以下作成中です。