射頻識別技術(shù)漫談(6)——通訊協(xié)議概述
通訊協(xié)議是通訊的雙方或多方在交流時(shí)遵守的規(guī)矩,包括誰先發(fā)起通訊,先交流什么,后交流什么,一方如何問,另一方如何答等。在這里通迅的雙方指的是讀寫器和卡片。
首先是誰先發(fā)起通訊,很顯然有兩種,讀寫器先發(fā)言和卡片先發(fā)言。前一種叫ReaderTalk First,簡稱為RTF;后一種叫Tag TalkFirst,簡稱為TTF。
我們知道,卡片從讀寫器產(chǎn)生的射頻場獲得工作時(shí)需要的能量,一般認(rèn)為應(yīng)該是讀寫器主動,卡片被動才對,這也是人之常情。所以多數(shù)功能稍復(fù)雜的卡片都是采用RTF模式,即讀寫器問,卡片回答。讀寫器沒有命令,卡片是無論如何也不能主動說話的。但是有些卡片功能單一,每次與讀寫器的交流中只會回答一個(gè)問題,而且每次內(nèi)容都相同。對于這種卡片,似乎再讓讀寫器每次先提問已經(jīng)沒有什么意義了,還不如每次與讀寫器交流直接讓卡片先說它那永遠(yuǎn)不會變的一句話得了,于是就有了TTF模式。TTF模式的卡片一般都是我們常說的ID卡,即識別卡,ID卡每次說的相同的一句話都是一個(gè)識別號,讀寫器利用這個(gè)識別號確定持卡者的身份。
其次是交流的秩序。對TTF卡片當(dāng)然沒什么秩序可言了,一進(jìn)入射頻場卡片就自說自話。但對RTF的卡片一般有嚴(yán)格的順序,如下圖所示:
第一步是讀寫器呼叫卡,如果射頻場中有讀寫器支持的卡片,卡片將回送一個(gè)應(yīng)答,告訴讀寫器自己是什么類型的卡片。
然后讀寫發(fā)出命令選中卡片,如果射頻場中有多張卡片,通常還要進(jìn)行防沖突循環(huán)以便決出唯一張卡片進(jìn)行操作。
第三步是進(jìn)行認(rèn)證,一方面讀寫器要認(rèn)證卡片是合法的,另一方卡片也要認(rèn)證讀寫器是合法的。
如果認(rèn)證順利通過,就可以進(jìn)行正常的讀寫數(shù)據(jù)操作了。
這些步驟并不都是必須的,有些簡單的卡片,要求操作前用戶把卡片放到讀寫器上,讀寫器直接對其進(jìn)行讀寫操作,前面的3步都省了;有些卡片沒有密碼,當(dāng)然不需要相互認(rèn)證;有些卡片不支持防沖突,同時(shí)有多張卡片時(shí)將無法操作;還有些卡片將呼叫和防沖突用一個(gè)步驟代替。所以對于具體的卡片,要仔細(xì)閱讀其說明書,進(jìn)行具體的分析。
還有一類卡片既可以工作在TTF模式,又可以工作在RTF模式。兩種模式之間的切換一般有兩種方式:一種是卡片剛進(jìn)入射頻場上電復(fù)位后會等待一個(gè)固定時(shí)間,在這段時(shí)間內(nèi)如果有讀寫器的命令,則工作在RTF模式,如果沒有收到命令則進(jìn)入TTF模式。另一種是卡片上電后主動在RTF與TTF之間不停的切換,在TTF模式下發(fā)送完一個(gè)識別號后,立即進(jìn)入RTF模式等待讀寫器的命令,如果有命令則執(zhí)行命令,沒有命令則退出RTF模式返回TTF模式繼續(xù)發(fā)送識別號,之后進(jìn)行下一次的切換。
最后還有一個(gè)全雙工(Full Duplex,F(xiàn)DX)和半雙工(Half Duplex,HDX)的概念。在有線通訊中,我們知道全雙工就是通訊雙方可以同時(shí)雙向通訊,半雙工就是雖能雙向通訊,但某一時(shí)刻只能有一個(gè)方向通訊。一般來說當(dāng)然是全雙工好,如果技術(shù)上能實(shí)現(xiàn)全雙工,當(dāng)然最好不用半雙工;成本上全雙工貴,半雙工便宜。但在射頻識別技術(shù)中FDX和HDX并不是這個(gè)意思。在ISO11785中對FDX和HDX的定義如下:
FDX:標(biāo)簽和讀寫器在讀寫器產(chǎn)生的磁場沒有消失的情況下進(jìn)行通訊。
HDX:標(biāo)簽和讀寫器在讀寫器產(chǎn)生的磁場停止之后進(jìn)行通訊。
RFID技術(shù)中FDX的例子如Mifare系列卡片,HDX的例子如TI公司的134.2KHz標(biāo)簽,如RI-TRP-WR2B。目前的射頻卡FDX比較多,因?yàn)樯漕l卡無源,需要從讀寫器的射頻場取電,射頻場不消失,卡片可以源源不斷的取電,對卡片內(nèi)部的儲能電路要求不高。缺點(diǎn)是卡片回送數(shù)據(jù)時(shí)因?yàn)樽约翰荒墚a(chǎn)生射頻場,只能被動發(fā)送,所以一般采取負(fù)載調(diào)制的方法回送數(shù)據(jù)。HDX在讀寫器的射頻場停止后回送數(shù)據(jù),讀寫器對卡片數(shù)據(jù)的識別解調(diào)容易。缺點(diǎn)是對卡片的儲能電路要求較高,而且回送數(shù)據(jù)量有限。成本上HDX也未必比FDX便宜。
射頻識別技術(shù)漫談(7)——ID卡
ID(Identification)是識別的意思,ID卡就是識別卡。ID卡包含范圍廣泛,只要具有識別功能的卡片都可以叫ID卡,例如條碼卡,磁卡都可以是ID卡,我們這兒說的當(dāng)然是射頻識別卡。
射頻ID卡一般都工作在TTF模式,進(jìn)入射頻場得電后不停地發(fā)送自己的識別號。最初識別卡是用來識別人的,用5個(gè)字節(jié)40位二進(jìn)制數(shù)表示,可以識別大約一萬億人,估計(jì)是因?yàn)榭紤]到一萬億太多了,一般ID卡使用時(shí)只使用低位的4個(gè)字節(jié),而把最高位的一個(gè)字節(jié)作為廠家標(biāo)識或版本號使用。這樣4字節(jié)32位二進(jìn)制數(shù)可以識別43億人,在當(dāng)時(shí)全世界每人一個(gè)識別號也足夠了。當(dāng)然后來又發(fā)展到卡號可以隨便復(fù)制,這是后話。
為了檢查數(shù)據(jù)傳輸中是否發(fā)生了錯(cuò)誤,射頻識別卡對每個(gè)字節(jié)都增加了兩個(gè)校驗(yàn)位,其中高半字節(jié)一個(gè),低半字節(jié)一個(gè),這樣每個(gè)字節(jié)增加到10位二進(jìn)制數(shù),5個(gè)字節(jié)共有50位。為了校驗(yàn)數(shù)據(jù)的整體性錯(cuò)誤,射頻ID卡還增加了一個(gè)4位的縱向冗余檢驗(yàn),這樣整個(gè)ID卡數(shù)據(jù)增加到54位。當(dāng)進(jìn)入射頻場時(shí),如果卡片直接回送這5個(gè)字節(jié),那么讀寫器很難確定起始位和結(jié)束位,所以射頻識別卡又增加了9個(gè)二進(jìn)制“1”在前面作起始位,增加了一個(gè)二進(jìn)制“0”在后面作結(jié)束位,這樣ID卡就有了64位數(shù)據(jù),正好8個(gè)字節(jié)。其排列如下圖所示:
例如卡號為2100A5EAD9的卡片,其編碼格式為
1 1 1 1 1 1 1 1 1 9個(gè)“1”的起始位,也叫頭部
0 0 1 0 1 “2”
0 0 0 1 1 “1”
0 0 0 0 0 “0”
0 0 0 0 0 “0”
1 0 1 0 0 “A”
0 1 0 1 0 “5”
1 1 1 0 1 “E”
1 0 1 0 0 “A”
1 1 0 1 1 “D”
1 0 0 1 0 “9”
1 1 0 0 0 列偶校驗(yàn)和結(jié)束位“0”
射頻ID卡的數(shù)據(jù)編碼一般使用曼側(cè)斯特碼或兩項(xiàng)碼,傳送數(shù)據(jù)的速率用傳送一位二進(jìn)制數(shù)據(jù)使用幾個(gè)單位載波表示。常用的有64載波,32載波,16載波,在125KHz的頻率下,一個(gè)載波的時(shí)間是8微秒,因此相應(yīng)的位寬為512微秒,256微秒,128微秒。對應(yīng)的數(shù)據(jù)傳輸速率為2K(1953)、4K(3906)、8K(7813)。我們平常使用的大多是2K曼側(cè)斯特編碼的ID卡。下圖是使用HTRC110芯片讀卡時(shí),卡號為2100A5EAD9的卡片從數(shù)據(jù)輸出腳DOUT輸出的實(shí)測波形。
軟件解碼時(shí)可以使用查詢或中斷檢測跳變,配合定時(shí)器確定脈寬,根據(jù)跳變沿的方向確定數(shù)據(jù)。
為了和128位的動物識別標(biāo)簽相區(qū)別,業(yè)內(nèi)一般稱這種64位的ID卡格式為“ID64格式”。
射頻識別技術(shù)漫談(8)——動物標(biāo)簽
動物標(biāo)簽也是工作在TTF模式的ID(Identification)卡。之所以通常稱為動物標(biāo)簽,估計(jì)是因?yàn)橐粊砗妥R別人的ID卡相區(qū)分,二是因?yàn)閯游锊蝗缛寺犜挘说腎D卡可以做成卡片形狀拿在手上,而動物不會用四肢持卡,要么做成小玻璃管狀用設(shè)備注射到皮下,例如小狗小貓等寵物,要么做成耳釘訂在耳朵上,例如豬耳標(biāo),要么做成環(huán)狀套在腿上,例如信鴿的腳環(huán)。
動物識別標(biāo)簽的通訊方式分為全雙工(FDX)和半雙工(HDX),全雙工是標(biāo)簽回送數(shù)據(jù)時(shí)讀卡器產(chǎn)生的射頻場不消失,半雙工是標(biāo)簽回送數(shù)據(jù)時(shí)讀卡器產(chǎn)生的射頻場消失。目前市場上以全雙工模式居多,下面具體說明全雙工模式。
盡管生物物種不停地滅絕,但國際標(biāo)準(zhǔn)的制定者們還是堅(jiān)定的認(rèn)為世界上的動物比人多的多,所以全雙工模式的動物標(biāo)簽足足有128位,是ID64識別卡的兩倍。按順序依次是11位的頭部,64位的識別碼,16位的CRC校驗(yàn),24位的尾部。另外還有13位的控制位。
11位的頭部是固定的“00000000001”,用來引導(dǎo)和同步。
64位的識別碼是標(biāo)簽的主體部分,包括1位動物識別標(biāo)志,14位的保留位,1位附加數(shù)據(jù)標(biāo)志,10位國家碼和38位識別號。動物識別標(biāo)志表示這個(gè)標(biāo)簽是不是動物標(biāo)簽,為1表示是動物標(biāo)簽,為0表示不是動物標(biāo)簽。14位的保留位保留將來使用(RFU)。附加數(shù)據(jù)標(biāo)志位表示在64位的識別碼之后是否有另外的數(shù)據(jù)需要接收,1表示有,0表示沒有,一般情況此位為0。10位國家碼一共可以表示1024個(gè)國家,世界上本來就沒有這么多國家,于是規(guī)定其中的900-998用來表示獨(dú)立的標(biāo)簽制造商,999表示這個(gè)標(biāo)簽是一個(gè)測試用的標(biāo)簽,標(biāo)簽的序列號可能不是全國唯一的。38位的識別號表示在一個(gè)國家之內(nèi)的唯一序列號,當(dāng)然是在國家碼不等于999的情況下。
16位的CRC校驗(yàn)用來對前面的64位識別碼進(jìn)行錯(cuò)誤檢查,看是否在傳輸?shù)倪^程中發(fā)生了錯(cuò)誤。
24位的尾碼沒有規(guī)定什么內(nèi)容,一般填0。
前面的64位的識別碼,16位的CRC校驗(yàn),24位的尾部共有104位13個(gè)字節(jié).為了有效區(qū)分和校驗(yàn)這13個(gè)字節(jié),規(guī)定在每個(gè)字節(jié)的后面增加一個(gè)固定的“1”,共增加了13位,這就是控制位。所以控制位并不是在識別號的最后面,而是在中間13個(gè)字節(jié)每個(gè)字節(jié)的后面都有一位控制位“1”。標(biāo)簽回送數(shù)據(jù)時(shí)先回送低位字節(jié),再回送高位字節(jié),每個(gè)字節(jié)先送最低有效位(LSB),后送最高有效位(MSB),如下圖所示:
例如,一個(gè)標(biāo)簽的保留位是8003(01 1111 0100 0011),國家編碼是156(00 10011100),國內(nèi)唯一序列號是9138702(00 0000 0000 0000 1000 10110111 0100 0000 1110),尾部全0(0000 0000 0000 0000 00000000),動物標(biāo)志為1,有附加數(shù)據(jù)(1),標(biāo)簽的64位識別碼是10111110 10000111 00100111 0000000000000000 10001011 01110010 00001110,即十六進(jìn)制的0xBE872700008B720E。它的CRC16=0x2C72(00101100 01110010),動物標(biāo)簽一般使用兩相(Biphase)碼,則其發(fā)送波形如下:
再比如,我手頭有一個(gè)注射式動物標(biāo)簽如下圖:
打開后的樣子:
放在讀寫器上,從HTRC110的DOUT腳捕捉到波形如下:
則可以寫出以下形式
1 0 0 0 0 0 0 0 0 0 0 11個(gè)頭部
1 1 1 0 0 0 1 0 1 序列號SN7-SN0: C5H
1 0 1 1 0 0 0 0 0 序列號SN15-SN8: 60H
1 0 1 0 0 0 1 1 0 序列號SN23-SN16:46H
1 1 1 0 1 0 1 0 0 序列號SN31-SN24:D4H
1 0 0 1 0 0 0 0 0 序列號SN37-SN32:20H;國家碼C1-C0:00H
1 0 1 1 0 0 0 1 0 國家碼C9-C2:62H
1 0 0 0 0 0 0 0 0 保留位留位R6-R0=0,沒有附加數(shù)據(jù)
1 1 0 0 0 0 0 0 0 動物標(biāo)識=1,保留位R13-R7=0
1 0 1 0 1 0 1 0 1 CRC16校驗(yàn)低位字節(jié):55H
1 1 1 1 0 1 1 1 0 CRC16校驗(yàn)高位字節(jié):EEH
1 0 0 0 0 0 0 0 0 尾部TR7-TR06: 00H
1 0 0 0 0 0 0 0 0 尾部TR15-TR8: 00H
1 0 0 0 0 0 0 0 0 尾部TR23-TR16:00H
根據(jù)以上數(shù)據(jù)列表,可以知道,該標(biāo)簽的國家代碼是392(188H),國內(nèi)唯一序列號是141000335557(20D44660C5H)。你也看到了,包裝上寫著呢。
射頻識別技術(shù)漫談(9)——動物標(biāo)簽HDX
半雙工(HDX,HalfDuplex)技術(shù)是ISO11784/11785中規(guī)定的另一種標(biāo)簽與讀寫器之間的通訊方式。讀寫器先打開射頻場對標(biāo)簽充電以激活標(biāo)簽,然后關(guān)閉磁場,標(biāo)簽在讀寫器磁場關(guān)閉的情況下向讀寫器傳送數(shù)據(jù)。不過HDX雖然是在動物標(biāo)簽標(biāo)準(zhǔn)中規(guī)定,但似乎更多的應(yīng)用于和動物聯(lián)系不大的工業(yè)識別領(lǐng)域。這也沒什么大驚小怪的,標(biāo)準(zhǔn)是標(biāo)準(zhǔn),實(shí)際應(yīng)用中適合的才是最好的,就像信鴿雖然是動物,但許多信鴿的腳環(huán)識別號其實(shí)是ID64格式。
與全雙工(FDX)相比,HDX 通常識別能力更強(qiáng),因?yàn)镠DX讀寫器的射頻場在HDX標(biāo)簽響應(yīng)期間關(guān)閉,從而讀寫器可以專注于接收來自標(biāo)簽的信號,同時(shí)也消除了讀寫器射頻場對標(biāo)簽信號的干擾。HDX采用移頻鍵控(FSK)技術(shù),發(fā)送數(shù)據(jù)“1”使用124.2KHz的頻率,發(fā)送數(shù)據(jù)“0”使用134.2KHz的頻率。數(shù)據(jù)的傳送速率大約8Kbps,基本上是FDX的兩倍。實(shí)際工作時(shí)讀寫器持續(xù)打開射頻場至少50毫秒,以激活標(biāo)簽,在讀寫器關(guān)閉射頻場3毫秒的時(shí)間之內(nèi),標(biāo)簽開始回送識別數(shù)據(jù),如下圖所示:
因?yàn)闃?biāo)簽回送數(shù)據(jù)時(shí)讀寫器的射頻場已經(jīng)消失,回送數(shù)據(jù)完全使用標(biāo)簽自己之前儲存的能量,所以標(biāo)簽如何節(jié)能降耗非常重要。為此,一方面HDX傳送數(shù)據(jù)的速率比FDX快一倍,另一方面盡量減少不必要的數(shù)據(jù)傳輸,除了64位的識別數(shù)據(jù)必須完整回送外,其它部分只要不是非傳不可的數(shù)據(jù),標(biāo)簽是能省則省。頭部由FDX的11位減少為8位,同時(shí)省略了FDX的13位控制位,這樣一共比FDX少傳送16位,正好兩個(gè)字節(jié)。整個(gè)數(shù)據(jù)幀的位數(shù)也從128位減少到112位。同F(xiàn)DX一樣,數(shù)據(jù)發(fā)送時(shí)先送最低有效位(LSB)再送最高有效位(MSB),傳送的順序如下圖所示:
例如,一個(gè)標(biāo)簽的保留位是0,國家編碼是999(10進(jìn)制),國內(nèi)唯一序列號是1008(10進(jìn)制),尾部是123456(16進(jìn)制),動物標(biāo)志為1,有附加數(shù)據(jù)(1),64位識別碼的16進(jìn)制數(shù)為0x8001F9C0000003F0,它的CRC16=0x5DD6,標(biāo)簽回送數(shù)據(jù)的順序如下:
MSB LSB
0 1 1 1 1 1 1 0 8位頭部
1 1 1 1 0 0 0 0 38位國內(nèi)唯一序列號
0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0
1 1 1 1 1 0 0 1 10位國家代碼
0 0 0 0 0 0 0 1 1位附加數(shù)據(jù),14位保留數(shù)據(jù)
1 0 0 0 0 0 0 0 1位動物標(biāo)識
1 1 0 1 0 1 1 0 16位CRC校驗(yàn)
0 1 0 1 1 1 0 1
0 1 0 1 0 1 1 0 24位尾部
0 0 1 1 0 1 0 0
0 0 0 1 0 0 1 0
波形使用最簡單的非歸零碼,此處不再畫出。需要說明的是,因?yàn)榉菤w零碼容易失步,所以一般讀卡芯片解調(diào)后輸出數(shù)據(jù)都使用兩條線,一條數(shù)據(jù)線和一條時(shí)鐘線。比如TI的芯片RI45538,它的第15腳是RXDT,用來輸出數(shù)據(jù),第16腳是RXCK,用來輸出時(shí)鐘。
射頻識別技術(shù)漫談(10)——識別號的格式變化
從事RDID行業(yè)的朋友經(jīng)常會遇到這樣的情況,同一張ID卡,在不同廠家生產(chǎn)的讀卡器上讀出的識別號完全不一樣,有時(shí)甚至差之千里。ID卡的識別號一般是在出廠時(shí)被固化在卡片的ROM里,本身是不會改變的,問題出在讀卡器上,是讀卡器對卡片識別號采用了不同的輸出格式。下面以第7節(jié)中提到的ID卡(其卡號是16進(jìn)制的2100A5EAD9H)為例,說明常見的識別號輸出格式。
1.ASCII碼與16進(jìn)制真值變換
在嵌入式系統(tǒng)里,數(shù)據(jù)的存儲一般以字節(jié)為單位,字節(jié)的表示范圍為16進(jìn)制的00-FFH,這就是16進(jìn)制的真值。而計(jì)算機(jī)顯示數(shù)據(jù)一般使用可見字符的ASCII碼,ASCII碼使用一個(gè)字節(jié)表示原來16進(jìn)制真值數(shù)據(jù)的半個(gè)字節(jié)。比如ASCII用30H-39H表示16進(jìn)制的0-9,用41-46H表示16進(jìn)制的A-F。對于上面的卡號,在16進(jìn)制顯示模式下,如果使用16進(jìn)制真值,輸出結(jié)果為
21 00 A5 EA D9
如果使用ASCII碼輸出,則變成了
32 31 30 30 41 35 45 41 44 39
2.大小端模式變換
如果我們把識別號看成一個(gè)數(shù),按多數(shù)人的習(xí)慣,一般要先輸出數(shù)據(jù)的高位部分,再輸出數(shù)據(jù)的低位部分。對于卡號2100A5EAD9H到底是左邊的21是最高位,還是右邊的D9是最高位呢?這就是大小端模式的問題。如果認(rèn)為左邊是高位,就是大端模式,如果認(rèn)為右邊是高位,就是小端模式。所以識別號2100A5EAD9H在大端模式下輸出就是.
21 00 A5 EA D9
在小段模式下輸出就是
D9 EA A5 00 21
3.識別號的整體與部分輸出
ID卡的識別號有5個(gè)字節(jié),通常情況下使用低位的4個(gè)字節(jié)。有的用戶需要ID號的全部信息,就會輸出全部5個(gè)字節(jié)。有時(shí)一個(gè)單位的人數(shù)較少,為方便記錄,只使用低位的2個(gè)或3個(gè)字節(jié)。使用的字節(jié)數(shù)越少,表示的數(shù)值范圍越小,越容易發(fā)生重號。僅使用兩個(gè)或3個(gè)字節(jié)的用戶,一般在購卡時(shí)會購買一個(gè)低位連續(xù)的號段,同時(shí)讓高位字節(jié)固定。比如如果想只使用低位的兩個(gè)字節(jié),則可以固定高位3個(gè)字節(jié)為2100A5H, 低位兩個(gè)字節(jié)從0000-1000H,也就是將2100A50000-2100A51000H范圍的識別卡買斷。這樣在單位內(nèi)部使用時(shí)就不會重號了。實(shí)際上只要高位的三個(gè)字節(jié)相同,根據(jù)卡號的唯一性,低位的兩個(gè)字節(jié)無論如何也不會相同的。如果卡號不唯一,情況將另當(dāng)別論,“關(guān)于ID卡的復(fù)制”后面還要述及。
2100A5EAD9H在大端模式下輸出5個(gè)字節(jié)
21 00 A5 EA D9
輸出4個(gè)字節(jié)
00 A5 EA D9
輸出3個(gè)字節(jié)
A5 EA D9
輸出2個(gè)字節(jié)
EA D9
4.16進(jìn)制與10進(jìn)制轉(zhuǎn)換
對于卡片的用戶來說,10進(jìn)制相對于16進(jìn)制更容易記憶和接受,所以許多讀卡器都把卡號轉(zhuǎn)換成10進(jìn)制輸出。多數(shù)情況下,是將低位的4個(gè)字節(jié)轉(zhuǎn)換為10位的10進(jìn)制數(shù),當(dāng)然也可以把5個(gè)字節(jié)轉(zhuǎn)換為13位的10進(jìn)制數(shù)、把3個(gè)字節(jié)轉(zhuǎn)換為8位的10進(jìn)制數(shù)、把2個(gè)字節(jié)轉(zhuǎn)換為5位的10進(jìn)制數(shù)輸出。
2100A5EAD9H整體5字節(jié)轉(zhuǎn)換為13位10進(jìn)制數(shù)結(jié)果為
141744794329
右邊4字節(jié)轉(zhuǎn)換為10進(jìn)制
0010873561
右邊3字節(jié)轉(zhuǎn)換為10進(jìn)制
10873561
右邊2字節(jié)轉(zhuǎn)換為10進(jìn)制
60121
5.數(shù)據(jù)的韋根格式
這里的韋根指的是韋根數(shù)據(jù)轉(zhuǎn)換格式,而不是韋根信號傳輸接口。韋根數(shù)據(jù)格式只使用識別號的低位三個(gè)字節(jié),這三個(gè)字節(jié)的第一個(gè)字節(jié)轉(zhuǎn)換成一個(gè)3位的10進(jìn)制數(shù),后兩個(gè)字節(jié)轉(zhuǎn)換成一個(gè)5位的10進(jìn)制數(shù),然后把兩部分組合成一個(gè)8位的10進(jìn)制數(shù)輸出。例如2100A5EAD9H,只使用A5EAD9H,把A5H化為10進(jìn)制的165,把 EAD9H化為10進(jìn)制的60121,最后輸出16560121。
6.數(shù)據(jù)的半字節(jié)旋轉(zhuǎn)
還有一些讀卡器廠家的排他性較強(qiáng),對ID號進(jìn)行了一些加密變換,比如所有卡號的識別字節(jié)都異或一個(gè)數(shù),或者按某種規(guī)則把識別號和一些數(shù)進(jìn)行運(yùn)算,然后將運(yùn)算結(jié)果輸出。這種情況下一般很難猜出其加密算法。半字節(jié)旋轉(zhuǎn)就是常見的一種加密方法。我們知道,16進(jìn)制數(shù)的數(shù)值范圍是0-15,用4位2進(jìn)制數(shù)表示。半字節(jié)旋轉(zhuǎn)法是將每一個(gè)0-15之間的4位2進(jìn)制數(shù)左邊的兩個(gè)bit和右邊的兩個(gè)bit對調(diào)。其對調(diào)的結(jié)果如下
原值16進(jìn)制 原值2進(jìn)制 對調(diào)后2進(jìn)制 對調(diào)后16進(jìn)制
0 0000 0000 0
1 0001 1000 8
2 0010 0100 4
3 0011 1100 C
4 0100 0010 2
5 0101 1010 A
6 0110 0110 6
7 0111 1110 E
8 1000 0001 1
9 1001 1001 9
A 1010 0101 5
B 1011 1101 D
C 1100 0011 3
D 1101 1011 B
E 1110 0111 7
F 1111 1111 F
例如2100A5EAD9H ,按上述規(guī)則變?yōu)?8005A75B9H
7.ID64格式輸出
前面說過,TTF的ID卡,只要一進(jìn)入讀卡器的射頻場,就不停的發(fā)送64位的ID64格式的數(shù)據(jù),讀卡器從這64位數(shù)據(jù)中解碼提取5個(gè)字節(jié)的識別號。有些讀卡器直接將64數(shù)據(jù)不解碼輸出,這時(shí)正好是8個(gè)字節(jié)。例如2100A5EAD9H,對應(yīng)的ID64格式輸出為FF94600515DA6E58H(參見射頻識別技術(shù)漫談(7)——ID卡)。由于ID64格式的開始是9個(gè)“1”,所以這種輸出的第一個(gè)字節(jié)必定是FFH。
8.數(shù)據(jù)的前綴與后綴
前面幾條主要說的是卡號本身的變換。在ASCII碼輸出的情況下,為了區(qū)分每一條數(shù)據(jù),有時(shí)讀卡器在每一條識別號的后面增加一個(gè)回車換行(0D 0A);有時(shí)為了更清楚的表示每一條識別號的開始和結(jié)束,在識別號的前面增加一個(gè)起始符,后面增加一個(gè)結(jié)束符,最常見的起始符是02,結(jié)束符是03。例如2100A5EAD9H,增加了前綴后綴和回車換行,并轉(zhuǎn)為ASCII輸出后的格式為
02 32 31 30 30 41 35 45 41 44 39 0D 0A 03
有些讀卡器還有校驗(yàn)字節(jié),射頻識別技術(shù)中常用的數(shù)據(jù)校驗(yàn)方法筆者將用專門一節(jié)介紹。
實(shí)際的讀卡器輸出格式往往是上述一種或幾種的組合,例如先半字節(jié)旋轉(zhuǎn),然后轉(zhuǎn)化為10進(jìn)制,最后用ASCII加前后綴輸出。對于其他可讀寫的IC卡,比如常用的Mifare系列卡片,當(dāng)用作ID卡時(shí),其序列號的格式也有上述類似的變換。