[PR]今日のニュースは
「Infoseek モバイル」

Gコードのデコードについて

Gコードは、日、ch、録画開始時刻と録画時間のデータしか持っていません。そして、Gコードのシステムの内部の時計から、現在の年、月のデータを取り出して、それを混合させてデコードしています。Gコードは、まず最初に別のコード(ここでは順コードとしています)に直す必要があります。
そのコードを1を引いて32で割って1を足せば、日付が出てきます。
ただし、順コードの下3桁が000、または日付が32になるときは、エラーになります。 
3桁以下の場合は、順コードを1引いて32で割った余りに、
日付*(現在の月+1)
を足して、それを32で割った余り(これを基本パターンとします)を2進数のビットごとに分離すると

時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)
 (以下続く)

以下作成中です。


戻る