この規格ページの目次
37
X 6323-3 : 2011 (ISO/IEC 15693-3 : 2009)
附属書C
(参考)
巡回冗長検査(CRC)
C.1 CRCエラー検出方法
巡回冗長検査(CRC)は,始めのフラグバイトからデータの終わりまで,メッセージ中の全てのデータ
について計算される。このCRCは,VCDからVICCへ,及びVICCからVCDへの伝送に使用される。
表C.1−CRCの規定
CRCの規定
CRCの型 ビット長 計算式 方向 初期値 余剰
JIS X 5203 16ビット X16+X12+X5+1=“8408” 後方 “FFFF” “F0B8”
シフトエラーから保護するために,計算されたCRCは,更に変換される。計算されたCRCについて1
の補数を求め,それを伝送するときのメッセージに付加する。
この変換は,次の例に含まれる。
受信したメッセージの検査をするために,よく使われる方法として,2バイトのCRCを含めてしばしば
再計算される。この場合,CRCの期待値は,余剰=“F0B8”となる。
次の斜体文字で示すテキスト文は,C言語で記述され,構成するメッセージをバイト単位で与えてCRC
を計算する一つの例とする。
#include <stdio.h>
#define POLYNOMIAL 0x8408 // x^16 + x^12 + x^5 + 1
#define PRESETVALUE 0xFFFF
#define CHECKVALUE 0xF0B8
#define NUMBEROFBYTES 4 // Example: 4 data bytes
#define CALCCRC 1
#define CHECKCRC 0
void main()
[{
unsigned int currentcrcvalue;
unsigned char arrayofdatabytes[NUMBEROFBYTES + 2] = [{1, 2, 3, 4, 0x91, 0x39}];
int numberofdatabytes = NUMBEROFBYTES;
int calculateorcheckcrc;
int i, j;
calculateorcheckcrc = CALCCRC;
// calculateorcheckcrc = CHECKCRC; // This could be an other example
――――― [JIS X 6323-3 pdf 41] ―――――
38
X 6323-3 : 2011 (ISO/IEC 15693-3 : 2009)
if (calculateorcheckcrc == CALCCRC)
[{
numberofdatabytes = NUMBEROFBYTES;
}]
else // check CRC
[{
numberofdatabytes = NUMBEROFBYTES + 2;
}]
currentcrcvalue = PRESETVALUE;
for (i = 0; i < numberofdatabytes; i++)
[{
currentcrcvalue = currentcrcvalue ^ ((unsigned int) arrayofdatabytes[i]);
for (j = 0; j < 8; j++)
[{
if (currentcrcvalue & 0x0001)
[{
currentcrcvalue = (currentcrcvalue >> 1) POLYNOMIAL;
}]
else
[{
currentcrcvalue = (currentcrcvalue >> 1);
}]
}]
}]
if (calculateorcheckcrc == CALCCRC)
[{
currentcrcvalue = ~currentcrcvalue;
printf ("CRC-ISO/IEC 13239 of [{ 1, 2, 3, 4}] is '3991'n");
printf ("Generated CRC is '%04X'n", currentcrcvalue);
printf ("The Least Significant Byte (transmitted first) s: '%02X'n",
currentcrcvalue & 0xFF);
printf( "The Most Significant Byte (transmitted second) s: '%02X'n",
(currentcrcvalue >> 8) & 0xFF);
printf( "Executing this program when CHECKCRC generates: 'F0B8'n");
// currentcrcvalue is now ready to be appended to the data stream
// (first LSByte, then MSByte)
}]
else // check CRC
[{
if (currentcrcvalue == CHECKVALUE)
――――― [JIS X 6323-3 pdf 42] ―――――
39
X 6323-3 : 2011 (ISO/IEC 15693-3 : 2009)
[{
printf ("Checked CRC is ok (0x%04X) n", currentcrcvalue);
}]
else
[{
printf ("Checked CRC is NOT ok (0x%04X) n", currentcrcvalue);
}]
}]
上のC言語プログラムを実行した結果は,次のようになる。
CRC-ISO/IEC 13239 of [{ 1, 2, 3, 4}] is '3991'
Generated CRC is '3991'
The Least Significant Byte (transmitted first) s: '91'
The Most Significant Byte (transmitted second) s: '39'
Executing this program when CHECKCRC generates: 'F0B8'
C.2 CRCの計算例
この例は,“0B”ブロックを読み取るためのRead single blockコマンドを参照している。
VCDによって選択された動作モードは,単一副搬送波,高速伝送速度及びアドレスモードとする。
VICCのUIDは,“E0 04 AB 89 67 45 23 01”とする。
要求パラメタのフィールド内容は,次のようになる。
− フラグバイト : “22”
− コマンドコード : “20”
− UID : “E0 04 AB 89 67 45 23 01” ここに,“E0”は,最上位バイト
− ブロック番号 : “0B”
− CRC : “BAE3” ここに,“BA”は,最上位バイト
CRCは,計算された後,この規格に基づく伝送プロトコルに従って,要求パラメタフィールドに設定さ
れる。
“22”“20”“01”“23”“45”“67”“89”“AB”“04”“E0”“0B”
注記1 UIDは,最下位バイト側より先に伝送される。
注記2 表C.2は,各段階における計算結果を示す。
要求コマンドは,次のように伝送される。
SOF“22”“20”“01”“23”“45”“67”“89”“AB”“04”“E0”“0B”“E3”“BA”EOF
注記1 CRCは,最下位バイト側より先に伝送される。
注記2 各バイトは,最下位ビット側より先に伝送される。
――――― [JIS X 6323-3 pdf 43] ―――――
40
X 6323-3 : 2011 (ISO/IEC 15693-3 : 2009)
表C.2−CRC計算の実例
VCDにおける VICCにおける
段階 入力
CRCの値 CRCの検査値
1 “22” “F268” “0D97”
2 “20” “3EC6” “C139”
3 “01” “42F5” “BD0A”
4 “23” “4381” “BC7E”
5 “45” “7013” “8FEC”
6 “67” “C5AB” “3A54”
7 “89” “F2AD” “0D52”
8 “AB” “95BC” “6A43”
9 “04” “C92E” “36D1”
10 “E0” “DFC3” “203C”
11 “0B” “BAE3” “451C”
12 “E3” “0F3D”
13 “BA” “F0B8”
――――― [JIS X 6323-3 pdf 44] ―――――
41
X 6323-3 : 2011 (ISO/IEC 15693-3 : 2009)
参考文献
[1] JIS X 6302(規格群) 識別カード−記録技術
注記 対応国際規格 : ISO/IEC 7811 (all parts),Identification cards−Recording technique(MOD)
[2] JIS X 6320-1 識別カード−ICカード−第1部 : 外部端子付きICカードの物理的特性
注記 対応国際規格 : ISO/IEC 7816-1:1998,Identification cards−Integrated circuit(s) ards with contacts
−Part 1: Physical characteristics及びAmendment 1:2003(IDT)
[3] JIS X 6320-2 識別カード−ICカード−第2部 : 外部端子付きICカードの端子の寸法及び位置
注記 対応国際規格 : ISO/IEC 7816-2:2007,Identification cards−Integrated circuit cards−Part 2: Cards
with contacts−Dimensions and location of the contacts(IDT)
[4] JIS X 6305-7 識別カードの試験方法−第7部 : 非接触(外部端子なし)ICカード−近傍型
注記 対応国際規格 : ISO/IEC 10373-7,Identification cards−Test methods−Part 7: Vicinity cards(IDT)
[5] ISO/IEC 7812-1:2006,Identification cards−Identification of issuers−Part 1: Numbering system
[6] ISO/IEC 7812-2:2007,Identification cards−Identification of issuers−Part 2: Application and registration
procedures
[7] ISO/IEC 7813:2006,Information technology−Identification cards−Financial transaction cards
JIS X 6323-3:2011の引用国際規格 ISO 一覧
- ISO/IEC 15693-3:2009(IDT)
JIS X 6323-3:2011の国際規格 ICS 分類一覧
- 35 : 情報技術.事務機械 > 35.240 : 情報技術(IT)の応用 > 35.240.15 : IDカード及び関連装備
JIS X 6323-3:2011の関連規格と引用規格一覧
- 規格番号
- 規格名称
- JISX5203:1998
- システム間の通信及び情報交換―ハイレベルデータリンク制御(HDLC)手順