BCC 校正演算法 (java)

來源:互聯網
上載者:User

非接觸卡讀卡機與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;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.