CRC 实现,生成校验码和验证
来源:互联网 发布:新网已备案域名 编辑:程序博客网 时间:2024/05/16 11:42
class CrcClass { static ushort[] crc_table = { 0x0000 , 0x1021 , 0x2042 , 0x3063 , 0x4084 , 0x50a5 , 0x60c6 , 0x70e7 , 0x8108 , 0x9129 , 0xa14a , 0xb16b , 0xc18c , 0xd1ad , 0xe1ce , 0xf1ef , 0x1231 , 0x0210 , 0x3273 , 0x2252 , 0x52b5 , 0x4294 , 0x72f7 , 0x62d6 , 0x9339 , 0x8318 , 0xb37b , 0xa35a , 0xd3bd , 0xc39c , 0xf3ff , 0xe3de , 0x2462 , 0x3443 , 0x0420 , 0x1401 , 0x64e6 , 0x74c7 , 0x44a4 , 0x5485 , 0xa56a , 0xb54b , 0x8528 , 0x9509 , 0xe5ee , 0xf5cf , 0xc5ac , 0xd58d , 0x3653 , 0x2672 , 0x1611 , 0x0630 , 0x76d7 , 0x66f6 , 0x5695 , 0x46b4 , 0xb75b , 0xa77a , 0x9719 , 0x8738 , 0xf7df , 0xe7fe , 0xd79d , 0xc7bc , 0x48c4 , 0x58e5 , 0x6886 , 0x78a7 , 0x0840 , 0x1861 , 0x2802 , 0x3823 , 0xc9cc , 0xd9ed , 0xe98e , 0xf9af , 0x8948 , 0x9969 , 0xa90a , 0xb92b , 0x5af5 , 0x4ad4 , 0x7ab7 , 0x6a96 , 0x1a71 , 0x0a50 , 0x3a33 , 0x2a12 , 0xdbfd , 0xcbdc , 0xfbbf , 0xeb9e , 0x9b79 , 0x8b58 , 0xbb3b , 0xab1a , 0x6ca6 , 0x7c87 , 0x4ce4 , 0x5cc5 , 0x2c22 , 0x3c03 , 0x0c60 , 0x1c41 , 0xedae , 0xfd8f , 0xcdec , 0xddcd , 0xad2a , 0xbd0b , 0x8d68 , 0x9d49 , 0x7e97 , 0x6eb6 , 0x5ed5 , 0x4ef4 , 0x3e13 , 0x2e32 , 0x1e51 , 0x0e70 , 0xff9f , 0xefbe , 0xdfdd , 0xcffc , 0xbf1b , 0xaf3a , 0x9f59 , 0x8f78 , 0x9188 , 0x81a9 , 0xb1ca , 0xa1eb , 0xd10c , 0xc12d , 0xf14e , 0xe16f , 0x1080 , 0x00a1 , 0x30c2 , 0x20e3 , 0x5004 , 0x4025 , 0x7046 , 0x6067 , 0x83b9 , 0x9398 , 0xa3fb , 0xb3da , 0xc33d , 0xd31c , 0xe37f , 0xf35e , 0x02b1 , 0x1290 , 0x22f3 , 0x32d2 , 0x4235 , 0x5214 , 0x6277 , 0x7256 , 0xb5ea , 0xa5cb , 0x95a8 , 0x8589 , 0xf56e , 0xe54f , 0xd52c , 0xc50d , 0x34e2 , 0x24c3 , 0x14a0 , 0x0481 , 0x7466 , 0x6447 , 0x5424 , 0x4405 , 0xa7db , 0xb7fa , 0x8799 , 0x97b8 , 0xe75f , 0xf77e , 0xc71d , 0xd73c , 0x26d3 , 0x36f2 , 0x0691 , 0x16b0 , 0x6657 , 0x7676 , 0x4615 , 0x5634 , 0xd94c , 0xc96d , 0xf90e , 0xe92f , 0x99c8 , 0x89e9 , 0xb98a , 0xa9ab , 0x5844 , 0x4865 , 0x7806 , 0x6827 , 0x18c0 , 0x08e1 , 0x3882 , 0x28a3 , 0xcb7d , 0xdb5c , 0xeb3f , 0xfb1e , 0x8bf9 , 0x9bd8 , 0xabbb , 0xbb9a , 0x4a75 , 0x5a54 , 0x6a37 , 0x7a16 , 0x0af1 , 0x1ad0 , 0x2ab3 , 0x3a92 , 0xfd2e , 0xed0f , 0xdd6c , 0xcd4d , 0xbdaa , 0xad8b , 0x9de8 , 0x8dc9 , 0x7c26 , 0x6c07 , 0x5c64 , 0x4c45 , 0x3ca2 , 0x2c83 , 0x1ce0 , 0x0cc1 , 0xef1f , 0xff3e , 0xcf5d , 0xdf7c , 0xaf9b , 0xbfba , 0x8fd9 , 0x9ff8 , 0x6e17 , 0x7e36 , 0x4e55 , 0x5e74 , 0x2e93 , 0x3eb2 , 0x0ed1 , 0x1ef0 }; //生成CRC效验码 public static ushort getCRC_CCITT(byte[] data, int len) { byte hbit = 0; ushort crc = 0x0000; for (int i = 0; i < len; i++) { hbit = (byte)((crc & 0xff00) >> 8); crc <<= 8; crc ^= crc_table[hbit ^ data[i]]; } return crc; } }
//增加内部CRC效验码 public static string EncodeFirstCrcCode(string innerCode) { string firstCrcCode; byte[] byteDataSource = CommonClass.strToHexByte(innerCode); firstCrcCode = innerCode + CrcClass.getCRC_CCITT(byteDataSource, byteDataSource.Length).ToString("X"); return firstCrcCode; }
验证CRC
public bool CheckDecodeCrc(string secondCrcCode) { byte[] byteDataSource = CommonClass.strToHexByte(secondCrcCode); secondCrcCode = CrcClass.getCRC_CCITT(byteDataSource, byteDataSource.Length).ToString("X"); bool result; if(secondCrcCode.Equals("0")) { result = true; } else { result = false; } return result; }
注:CRC有好几种格式,我这里只是根据项目情况编写的其中一种。
详见我的BLOG里面有关CRC的介绍。
- CRC 实现,生成校验码和验证
- CRC冗余校验码的介绍和实现
- 实现CRC校验码
- java实现CRC校验码
- CRC校验码的生成编码
- 二进制CRC校验码生成程序
- BCD码、CRC校验码、和校验码的生成(C#.NET)
- 奇偶校验码,海明校验码 和 循环冗余校验码(CRC)
- 奇偶校验码,海明校验码 和 循环冗余校验码(CRC)
- 奇偶校验码、海明校验码 和 循环冗余校验码(CRC)
- Modbus RTU CRC校验码生成代码
- CRC循环冗余校验码的生成
- crc校验码生成程序(C#)
- CRC校验码
- CRC校验码
- CRC校验码
- CRC校验码
- CRC校验码
- 静静的在心里承受所有的伤痛和不快乐
- JavaScript Compiler Power by Google Closure Tools
- 理解矩阵
- ARCGIS问题:ArcToolbox中的Conversion模块
- jQuery所支持的基本CSS选择器
- CRC 实现,生成校验码和验证
- Eclipse IDE install new software problem
- 梦断代码--一个程序员的自白(五)
- android监听电话状态问题
- Smoke testing
- 解决问题:The run destination My Mac 64-bit is not valid for Running the scheme
- 视频网站开关灯特效
- 学习资料
- 【Android】超级终端命令