CRC 校验

来源:互联网 发布:python运行 编辑:程序博客网 时间:2024/05/21 21:55

原帖子地址:http://cuisuqiang.iteye.com/blog/1716654

CRC 校验

    博客分类:
  • 网络编程
崔素强cuisuqiangcrcjava校验

CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

Java代码 复制代码 收藏代码
  1. import java.util.Arrays; 
  2.  
  3. /**
  4. * @说明 CRC校验类
  5. * @author cuisuqiang
  6. * @version 1.0
  7. * @since
  8. */ 
  9. public class CRCCheck { 
  10.      
  11.     public staticvoid main(String[] args) { 
  12.         byte[] btm = newbyte[] { 12,13, 1,0, 0,1, 0,31, -19,0, 8
  13.                 0, 1 }; 
  14.         byte[] btl = CRCCheck.getCRCByteValue(btm); 
  15.         System.out.println(Arrays.toString(btl)); 
  16.     } 
  17.  
  18.     /**
  19.      * 入口方法
  20.      * @param bt 需要校验的字节流
  21.      * @return
  22.      */ 
  23.     public staticbyte[] getCRCByteValue(byte[] bt){ 
  24.         char ch = caluCRC(bt); 
  25.         return charToByte(ch); 
  26.     } 
  27.  
  28.     public staticchar[] crc_tb = { 0x0000,0x1021, 0x2042,0x3063, 0x4084
  29.             0x50a5, 0x60c6,0x70e7, 0x8108,0x9129, 0xa14a,0xb16b, 0xc18c
  30.             0xd1ad, 0xe1ce,0xf1ef, 0x1231,0x0210, 0x3273,0x2252, 0x52b5
  31.             0x4294, 0x72f7,0x62d6, 0x9339,0x8318, 0xb37b,0xa35a, 0xd3bd
  32.             0xc39c, 0xf3ff,0xe3de, 0x2462,0x3443, 0x0420,0x1401, 0x64e6
  33.             0x74c7, 0x44a4,0x5485, 0xa56a,0xb54b, 0x8528,0x9509, 0xe5ee
  34.             0xf5cf, 0xc5ac,0xd58d, 0x3653,0x2672, 0x1611,0x0630, 0x76d7
  35.             0x66f6, 0x5695,0x46b4, 0xb75b,0xa77a, 0x9719,0x8738, 0xf7df
  36.             0xe7fe, 0xd79d,0xc7bc, 0x48c4,0x58e5, 0x6886,0x78a7, 0x0840
  37.             0x1861, 0x2802,0x3823, 0xc9cc,0xd9ed, 0xe98e,0xf9af, 0x8948
  38.             0x9969, 0xa90a,0xb92b, 0x5af5,0x4ad4, 0x7ab7,0x6a96, 0x1a71
  39.             0x0a50, 0x3a33,0x2a12, 0xdbfd,0xcbdc, 0xfbbf,0xeb9e, 0x9b79
  40.             0x8b58, 0xbb3b,0xab1a, 0x6ca6,0x7c87, 0x4ce4,0x5cc5, 0x2c22
  41.             0x3c03, 0x0c60,0x1c41, 0xedae,0xfd8f, 0xcdec,0xddcd, 0xad2a
  42.             0xbd0b, 0x8d68,0x9d49, 0x7e97,0x6eb6, 0x5ed5,0x4ef4, 0x3e13
  43.             0x2e32, 0x1e51,0x0e70, 0xff9f,0xefbe, 0xdfdd,0xcffc, 0xbf1b
  44.             0xaf3a, 0x9f59,0x8f78, 0x9188,0x81a9, 0xb1ca,0xa1eb, 0xd10c
  45.             0xc12d, 0xf14e,0xe16f, 0x1080,0x00a1, 0x30c2,0x20e3, 0x5004
  46.             0x4025, 0x7046,0x6067, 0x83b9,0x9398, 0xa3fb,0xb3da, 0xc33d
  47.             0xd31c, 0xe37f,0xf35e, 0x02b1,0x1290, 0x22f3,0x32d2, 0x4235
  48.             0x5214, 0x6277,0x7256, 0xb5ea,0xa5cb, 0x95a8,0x8589, 0xf56e
  49.             0xe54f, 0xd52c,0xc50d, 0x34e2,0x24c3, 0x14a0,0x0481, 0x7466
  50.             0x6447, 0x5424,0x4405, 0xa7db,0xb7fa, 0x8799,0x97b8, 0xe75f
  51.             0xf77e, 0xc71d,0xd73c, 0x26d3,0x36f2, 0x0691,0x16b0, 0x6657
  52.             0x7676, 0x4615,0x5634, 0xd94c,0xc96d, 0xf90e,0xe92f, 0x99c8
  53.             0x89e9, 0xb98a,0xa9ab, 0x5844,0x4865, 0x7806,0x6827, 0x18c0
  54.             0x08e1, 0x3882,0x28a3, 0xcb7d,0xdb5c, 0xeb3f,0xfb1e, 0x8bf9
  55.             0x9bd8, 0xabbb,0xbb9a, 0x4a75,0x5a54, 0x6a37,0x7a16, 0x0af1
  56.             0x1ad0, 0x2ab3,0x3a92, 0xfd2e,0xed0f, 0xdd6c,0xcd4d, 0xbdaa
  57.             0xad8b, 0x9de8,0x8dc9, 0x7c26,0x6c07, 0x5c64,0x4c45, 0x3ca2
  58.             0x2c83, 0x1ce0,0x0cc1, 0xef1f,0xff3e, 0xcf5d,0xdf7c, 0xaf9b
  59.             0xbfba, 0x8fd9,0x9ff8, 0x6e17,0x7e36, 0x4e55,0x5e74, 0x2e93
  60.             0x3eb2, 0x0ed1,0x1ef0 }; 
  61.  
  62.     /**
  63.      * 获得CRC验证码
  64.      */ 
  65.     public staticchar caluCRC(byte[] pByte) { 
  66.         int len = pByte.length; 
  67.         char crc; 
  68.         byte da; 
  69.         crc = 0x0
  70.         int i = 0
  71.         while (len-- != 0) { 
  72.             da = (byte) (crc / 256); 
  73.             crc <<= 8
  74.             int num = da ^ pByte[i]; 
  75.             if (num < 0
  76.                 num += 256
  77.             crc ^= crc_tb[num]; 
  78.             ++i; 
  79.         } 
  80.         return crc; 
  81.     } 
  82.  
  83.     /**
  84.      * char 转byte
  85.      */ 
  86.     public staticbyte[] charToByte(char c) { 
  87.         byte[] b = newbyte[2]; 
  88.         b[0] = (byte) ((c &0xFF00) >> 8); 
  89.         b[1] = (byte) (c &0xFF); 
  90.         return b; 
  91.     } 
  92.      
原创粉丝点击