各种常用校验方法的源代码

常用各种数据校验方法源代码Borland C++ Builder5.0

//-----------------------------------------------------------------------------

//定义数据类型缩写形式

typedef unsigned char  uchar;              //无符号字符

typedef unsigned short ushort;             //无符号短整型

typedef unsigned long  ulong;              //无符号长整型

typedef unsigned int   uint;               //无符号整型

typedef DynamicArray<Byte> TByteDynArray;  //动态定义字节数组

//CRC8位校验

uchar CRC8Valid(const uchar* puchData, int len)

{

uchar crc8 = 0;

while (len--)

{

crc8 = crc8 ^ (*puchData++);

}

return crc8;

}

//---------------------------------------------------------------------------

//CRC8位校验

uchar CRC8Valid(const TByteDynArray puchData, int len)

{

uchar crc8 = 0;

int index = 0;

while (len--)

{

crc8 = crc8 ^ puchData[index++];

}

return crc8;

}

//---------------------------------------------------------------------------

//和校验

uchar SumValid(const uchar* puchData, int len)

{

uchar crc8 = 0;

while (len--)

{

crc8 = crc8 + (*puchData++);

}

return crc8;

}

//---------------------------------------------------------------------------

//和校验

uchar SumValid(const TByteDynArray puchData, int len)

{

uchar crc8 = 0;

int index = 0;

while (len--)

{

crc8 = crc8 + puchData[index++];

}

return crc8;

}

//---------------------------------------------------------------------------

//从第index位开始进行校验

uchar SumValid(const uchar* puchData, int index,int len)

{

uchar crc8 = 0;

puchData+=index;

while (len--)

{

crc8 = crc8 + (*puchData++);

}

return crc8;

}

//---------------------------------------------------------------------------

//从第index位开始进行校验

uchar SumValid(const TByteDynArray puchData, int index,int len)

{

uchar crc8 = 0;

int indexs = 0;

indexs+=index;

while (len--)

{

crc8 = crc8 + puchData[indexs++];

}

return crc8;

}

//---------------------------------------------------------------------------

//CRC16校验

ushort CRC16Valid(const TByteDynArray buffer, int len)

{

ushort crc = 0, tmp;

int index = 0;

while(len--)

{

tmp = buffer[index++];

crc = crc ^ (tmp << 8);

for (int i = 0; i < 8; i++)

{

if (crc & 0x8000)

crc = (crc << 1) ^ 0x1021;

else

crc <<= 1;

}

}

crc = (crc >> 8) | (crc << 8);

return(crc);

}

//---------------------------------------------------------------------------

//CRC16校验

ushort CRC16Valid(const uchar* buffer, int len)

{

ushort crc = 0, tmp;

while(len--)

{

tmp = *buffer++;

crc = crc ^ (tmp << 8);

for (int i = 0; i < 8; i++)

{

if (crc & 0x8000)

crc = (crc << 1) ^ 0x1021;

else

crc <<= 1;

}

}

crc = (crc >> 8) | (crc << 8);

return(crc);

}

//------------------------------------------------------------------------------

//异或校验

void XORValid(const TByteDynArray buffer, int len)

{

char checksum = 0, cr = 13, ln = 10;

char ch1,c1; //校验位的高四位和第四位

for (int i = 0;  i<len;  i++)

{

checksum = checksum ^ buffer[i+1]; //进行异或交验取值

}

ch1 = (checksum  >> 4) & 0x0F;  //取高位数;

c1 = checksum & 0x0F;  //取低位数;

if (ch1 < 10) //低于10的数

ch1 = ch1  +  ‘0‘;

else

ch1 = (ch1 - 10 ) +  ‘A‘; //不低于10的16进制数,如:A、B、C、D、E、F

if (c1 < 10)

c1 = c1  +  ‘0‘;

else

c1 = (c1 - 10 )+  ‘A‘;

XOR_High=ch1;

XOR_Low =c1;

}

//-----------------------------------------------------------------------------

//异或校验

void XORValid(const uchar* buffer, int len)

{

char checksum = 0, cr = 13, ln = 10;

char ch1,c1; //校验位的高四位和第四位

for (int i = 0;  i<len;  i++)

{

checksum = checksum ^ buffer[i+1]; //进行异或交验取值

}

ch1 = (checksum  >> 4) & 0x0F;  //取高位数;

c1 = checksum & 0x0F;  //取低位数;

if (ch1 < 10) //低于10的数

ch1 = ch1  +  ‘0‘;

else

ch1 = (ch1 - 10 ) +  ‘A‘; //不低于10的16进制数,如:A、B、C、D、E、F

if (c1 < 10)

c1 = c1  +  ‘0‘;

else

c1 = (c1 - 10 )+  ‘A‘;

XOR_High=ch1;

XOR_Low =c1;

}

时间: 2024-08-07 19:14:48

各种常用校验方法的源代码的相关文章

常用加密方法

常用加密方法: 1> base64  2> MD5  3> MD5加盐  4> HMAC  5> 时间戳密码(用户密码动态变化) { 1> base64 { base64 编码是现代密码学的基础. 原本是 8个bit 一组表示数据,改为 6个bit一组表示数据,不足的部分补零,每 两个0 用 一个 = 表示. 用base64 编码之后,数据长度会变大,增加了大约 1/3 左右. base64 基本能够达到安全要求,但是,base64能够逆运算,非常不安全! base64

盈创动力之 JS校验方法

var IS_NULL = 128; // 10000000var IS_FULL = 64; // 01000000var IS_HALF = 32; // 00100000var IS_ASCII = 16; // 00010000var IS_NUM = 8; // 00001000var IS_DATE = 4; // 00000100var IS_PHONE = 2; // 00000010var IS_EMAIL = 1; // 00000001var IS_NOT_NULL = 0

VC的常用调试方法

前言 VS是非常强大的IDE,所以掌握VSVC的常用方法,将会使得我们找出问题解决问题事半功倍. 目录 VSVC的常用调试方法 前言 1. Watch窗口查看伪变量 2. 查看指针指向的一序列值 3. 内存泄露查找 4. 调试Release版本 5. 远程调试 6. 函数断点 7. 数据断点. 8. 代码执行时间 9. 格式化数据 10. 格式化内存 Watch窗口查看伪变量 按MSDN的介绍,伪变量就是用来查看特定信息的术语.例如当调用的API失败时,可以用GetLastError获取对应的错

NSDictionary的初始化和一些常用的方法总结

NSDictionary //初始化1. NSDictionary *dic11=[[NSDictionary alloc] initWithObjects:@[@"qwe",@"asd",@"zxc",@"qaz",@"wsx"] forKeys:@[@"111",@"222",@"333",@"444",@"555

LINQ常用扩展方法

下面的方法都是IEnumerable<T>的扩展方法: Average计算平均值: Min最小元素:Max最大元素:Sum元素总和: Count元素数量: Concat连接两个序列://Unoin all Contains序列是否包含指定元素: Distinct取得序列中的非重复元素: Except获得两个序列的差集: Intersect获得两个序列的交集: First取得序列第一个元素: Single取得序列的唯一一个元素,如果元素个数不是1个,则报错:!!!严谨的程序. FirstOrDe

黑马程序员_学习IOS之字典常用的方法

字典是无序的 数组是有序的.字典分为:可变字典和不可变字典  不可变字典对象 NSDictionary * dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3",@"four",@"4", nil]; //value = ke

SqlServer 常用分页方法总结

SqlServer 常用分页方法总结 下面示例总结了,SqlServer数据库 常用分页方法,仅供学习参考 A. 使用 RowNumber 和 Between And 组合分页: /********** 使用 RowNumber 和 Between And 组合分页 **********/ CREATE PROC proc_FuzzySearchAndPaging @pageIndex int, --页索引 @pageSize int, --页大小 @SearchKey Nvarchar(10)

Javascript 常用扩展方法

这篇文章纯粹是为了保存这些方法,供以后翻阅,其实一直保存在 evernote 里面,但觉得还是放到对的地方会好点. 现在收录的很少,希望以后会慢慢增多. 数组扩展 contains,remove 扩展 1 function ArrayContains(array, obj) { 2 for (var i = 0; i < array.length; i++) { 3 if (array[i] === obj) { 4 return true ; 5 } 6 } 7 return false ;

JavaScript中正则表达式判断匹配规则以及常用的方法

JavaScript中正则表达式判断匹配规则以及常用的方法: 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它"匹配"了. \d可以匹配一个数字                 '00\d'可以匹配'007' ,'\d\d\d'可以匹配'010' \w可以匹配一个字母或数字      '\w\w'可以匹配'js' \s可