從事RDID行業(yè)的朋友經(jīng)常會遇到這樣的情況,同一張ID卡,在不同廠家生產(chǎn)的讀卡器上讀出的識別號完全不一樣,有時甚至差之千里。ID卡的識別號一般是在出廠時被固化在卡片的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碼使用一個字節(jié)表示原來16進(jìn)制真值數(shù)據(jù)的半個字節(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.大小端模式變換
如果我們把識別號看成一個數(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個字節(jié),通常情況下使用低位的4個字節(jié)。有的用戶需要ID號的全部信息,就會輸出全部5個字節(jié)。有時一個單位的人數(shù)較少,為方便記錄,只使用低位的2個或3個字節(jié)。使用的字節(jié)數(shù)越少,表示的數(shù)值范圍越小,越容易發(fā)生重號。僅使用兩個或3個字節(jié)的用戶,一般在購卡時會購買一個低位連續(xù)的號段,同時讓高位字節(jié)固定。比如如果想只使用低位的兩個字節(jié),則可以固定高位3個字節(jié)為2100A5H, 低位兩個字節(jié)從0000-1000H,也就是將2100A50000-2100A51000H范圍的識別卡買斷。這樣在單位內(nèi)部使用時就不會重號了。實(shí)際上只要高位的三個字節(jié)相同,根據(jù)卡號的唯一性,低位的兩個字節(jié)無論如何也不會相同的。如果卡號不唯一,情況將另當(dāng)別論,“關(guān)于ID卡的復(fù)制”后面還要述及。
2100A5EAD9H在大端模式下輸出5個字節(jié)
21 00 A5 EA D9
輸出4個字節(jié)
00 A5 EA D9
輸出3個字節(jié)
A5 EA D9
輸出2個字節(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個字節(jié)轉(zhuǎn)換為10位的10進(jìn)制數(shù),當(dāng)然也可以把5個字節(jié)轉(zhuǎn)換為13位的10進(jìn)制數(shù)、把3個字節(jié)轉(zhuǎn)換為8位的10進(jìn)制數(shù)、把2個字節(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ù)格式只使用識別號的低位三個字節(jié),這三個字節(jié)的第一個字節(jié)轉(zhuǎn)換成一個3位的10進(jìn)制數(shù),后兩個字節(jié)轉(zhuǎn)換成一個5位的10進(jìn)制數(shù),然后把兩部分組合成一個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é)都異或一個數(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)法是將每一個0-15之間的4位2進(jìn)制數(shù)左邊的兩個bit和右邊的兩個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個字節(jié)的識別號。有些讀卡器直接將64數(shù)據(jù)不解碼輸出,這時正好是8個字節(jié)。例如2100A5EAD9H,對應(yīng)的ID64格式輸出為FF94600515DA6E58H(參見射頻識別技術(shù)漫談(7)——ID卡)。由于ID64格式的開始是9個“1”,所以這種輸出的第一個字節(jié)必定是FFH。
8.數(shù)據(jù)的前綴與后綴
前面幾條主要說的是卡號本身的變換。在ASCII碼輸出的情況下,為了區(qū)分每一條數(shù)據(jù),有時讀卡器在每一條識別號的后面增加一個回車換行(0D 0A);有時為了更清楚的表示每一條識別號的開始和結(jié)束,在識別號的前面增加一個起始符,后面增加一個結(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卡時,其序列號的格式也有上述類似的變換。
審核編輯 黃宇
-
RFID
+關(guān)注
關(guān)注
388文章
6152瀏覽量
237899 -
射頻識別技術(shù)
+關(guān)注
關(guān)注
0文章
96瀏覽量
16759
發(fā)布評論請先 登錄
相關(guān)推薦
評論