BCC 校驗算法 (java)

非接觸卡讀卡器與PC機的通訊格式如下:

    STX(02H)+ 6個字節的卡號+VERH+VERL+EOT(04H)
STX(02H)起始字節
EOT(04H)結束字節
6個字節的卡號爲六個十六進制的ASCII字符,6個字節的傳送,高字節在前,低字節在後。例如:
卡  號:         8  D  E  F  9  E
傳輸的數據格式:38 44 45 46 39 45   (十六進制)
在校驗時採用目前最通用的BCC校驗方式:
具體的方法是:
   將有效的卡號接字節作異或(XOR)校驗:
   38H (XOR)44H (XOR)45H (XOR)46H (XOR)39H(XOR)45H  =03H
   然後將接收到的數據VERH+VERL合成一個字節數據,30H(HEX)=0,33H(HEX)=3
   合成數據爲03H,接收到的數據與我們收到的卡號的校驗數據一致,則接收到
的卡號爲正確卡號。

再比如現有卡號爲: 
       
卡  號:         0  5  8  E  4  2
傳輸的數據格式:30 35 38 45 34  32  (十六進制)
在校驗時採用目前最通用的BCC校驗方式:
具體的方法是:
   將有效的卡號接字節作異或(XOR)校驗:
   30H (XOR)35H (XOR)38H (XOR)45H (XOR)34H(XOR)32H  =7EH
   然後將接收到的數據VERH+VERL合成一個字節數據,37H(HEX)=7,45H(HEX)=E
   合成數據爲7EH,接收到的數據與我們收到的卡號的校驗數據一致,則接收到
的卡號爲正確卡號。 

在編寫程序時,可以先將所有數據都接收到計算機的內存中,然後計算BCC校驗值VALUE1,再將接收的BCC值
拼成一個十六進制數VALUE2,然後比較這兩個值,如果相等,則接收到的卡號爲合法卡號,然後按您的系統
作相應的處理。



public static String getBCC(byte[] data) {

  String ret = "";
  byte BCC[]= new byte[1];
  for(int i=0;i<data.length;i++)
  {
  BCC[0]=(byte) (BCC[0] ^ data[i]);
  }
  String hex = Integer.toHexString(BCC[0] & 0xFF);
  if (hex.length() == 1) {
  hex = '0' + hex;
  }
  ret += hex.toUpperCase();
  return ret;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章