例として学生証番号をＱＲコードにしてみる。

モード指示
数字モード： 1
英数字モード： 10
8 bitバイト：0100
漢字ならば ：1000

学生証番号は英数字だけなので英数字モードを使うことにする。

データ={{0,0,1,0}}

例

学生証番号= "06B3136016E"

学生証番号の文字数を数え、2進法で表す。

BaseForm[StringLength[学生証番号],2]

これを9bit化し、ベクトルに直す。
0 ((を頭に付け加えたいので、2)^9) を足して10桁に直し、
下9桁をベクトルに直す。

データ=Append[データ,IntegerDigits[
StringLength[学生証番号]+2^9,2][[2;;10]]]

英数字モード[x_]:=
Which[DigitQ[x],ToCharacterCode[x][[1]]-48,
LetterQ[x],ToCharacterCode[ToUpperCase[x]][[1]]-55,
True,Switch[x," ",36,"$",37,"%",38,"*",39,
"+",40,"-",41,".",42,"/",43,":",44,_,"エラー：英数字モードでは扱えません"]]

Map[英数字モード,Characters[学生証番号]]
Partition[%,2,2,1,{}]
データ=Join[データ,Map[If[Length[#]==2,
IntegerDigits[#.{45,1}+2^11,2][[2;;12]],
IntegerDigits[#[[1]]+2^6,2][[2;;7]]]&,%]]

最後に終端パターンとして0000を付加する。

Append[データ,{0,0,0,0}]

ＱＲコードではデータはすべて8bitの単位で処理するので
上記のデータを8bit毎に区切る。
最後のビット列が8bit未満の場合は0で埋める。

データ=Partition[Flatten[データ],8,8,1,0]

得られたコード数がシンボルのデータコード数 この場合１３
に満たない場合は "11101100" および "00010001" を交互に
付加してシンボル容量にあわせる。

データ=Partition[データ,13,13,1,
{{1,1,1,0,1,1,0,0},
{0,0,0,1,0,0,0,1}}][[1]]

256 個の要素をもつ体 GF (2^8) を用いて符号を構成する。

γ は (γ^8)+(γ^4)+(γ^3)+(γ^2)+1 をみたす数とする。

minimal = (γ^8)+(γ^4)+(γ^3)+(γ^2)+1

GF (2^8) のすべての要素を加法表示と乗法表示したもののリストを作る。

additive=Table[
PolynomialMod[γ^(254-i),{minimal ,2}],
{i,0,254}]~
Join~{0};

multiplicative=Table[γ^(254-i),{i,0,254}]~
Join~{0};

toA は加法表示に直すため、toM は乗法表示に直すための関数。

toA[elem_]:=PolynomialMod[elem,{minimal ,2}]

For[i= 1, i<256,i++,toM0[additive[[i]]]=γ^(255-i)];
toM0[0]=0;
toM[elem_]:=toM0[PolynomialMod[elem,{minimal ,2}]]

符号を生成する多項式 (x+1) (x+γ) … ((γ^12)+x)

Table[toM[Coefficient[Product[x+γ^i,{i,0,12}],x,13-i]],
{i,0,13}]
generator =Collect[Product[x+γ^i,{i,0,12}],x,toM];

encode は13次元ベクトルを25次の符号多項式 （符号語） に直す関数。
((まず13次元ベクトルから12次多項式を作り、それにx)^13)　をかけて25次多項式を作り、
それを生成多項式で割った余り（12次式）を加える。
decode はこれを元に戻す関数。生成多項式による商を取る。

Off[General::spell1]

encode[vector_]:=
Collect[
PolynomialMod[
vector.Table[x^(Length[vector]+13-i),{i,1,Length[vector]}]+
PolynomialMod[vector.Table[x^(Length[vector]+13-i),{i,1,Length[vector]}],{generator,2}],2],
x,toM]

decode[polynomial_]:=
Map[toM,Table[Coefficient[polynomial,x,25-i],{i,0,12}]]

データ２=Map[toM[#.Table[(γ^((7-i))),{i,0,7}]]&,データ]

情報ベクトル２を２５次の符号多項式に直す。

符号多項式=encode[データ２]
符号語２=Table[Coefficient[符号多項式,x,25-i],
{i,0,25}]

符号語=Mod[Map[Table[Coefficient[toA[#],γ,7-i],{i,0,7}] &,符号語２],2]

ExportString[符号語,"Table"]

stream=OpenWrite["/Users/kuwata/Documents/授業/中央大学/2009-10/総合教育科目演習\ I\ (水2)/学生証番号/code.txt"]

WriteString[stream,ExportString[符号語,"Table"]]

Close[stream]