单片机常用校验方法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常见校验算法

一、校验算法

奇偶校验(单字节奇偶校验和多字节奇偶校验)

MD5校验

求校验和

BCC(Block Check Character/信息组校验码),常说的异或校验方法

CRC(Cyclic Redundancy Check/循环冗余校验)

LRC(Longitudinal Redundancy Check/纵向冗余校验)

二、奇偶校验

内存中最小的单位是比特,也称为“位”,位有只有两种状态分别以1和0来标示,每8个连续的比特叫做一个字节(byte)。不带奇偶校验的内存每个字节只有8位,如果其某一位存储了错误的值,就会导致其存储的相应数据发生变化,进而导致应用程序发生错误。而奇偶校验就是在每一字节(8位)之外又增加了一位作为错误检测位。在某字节中存储数据之后,在其8个位上存储的数据是固定的,因为位只能有两种状态1或0,假设存储的数据用位标示为1、1、1、0、0、1、0、1,那么把每个位相加(1+1+1+0+0+1+0+1=5),结果是奇数,那么在校验位定义为1,反之为0。当CPU读取存储的数据时,它会再次把前8位中存储的数据相加,计算结果是否与校验位相一致。从而一定程度上能检测出内存错误,奇偶校验只能检测出错误而无法对其进行修正,同时虽然双位同时发生错误的概率相当低,但奇偶校验却无法检测出双位错误

三、MD5校验

MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc 发明,由MD2/MD3/MD4 发展而来的。MD5的实际应用是对一段Message(字节串)产生fingerprint(指纹),可以防止被“篡改”。举个例子,天天安全网提供下载的MD5校验值软件WinMD5.zip,其MD5值是1e07ab3591d25583eff5129293dc98d2,但你下载该软件后计算MD5 发现其值却是81395f50b94bb4891a4ce4ffb6ccf64b,那说明该ZIP已经被他人修改过,那还用不用该软件那你可自己琢磨着看啦。

四、求校验和

求校验和其实是一种或运算。如下:

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

//如下是计算校验位函数

// checkdata,包括起始位在内的前九位数据的校验和

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

unsigned char CLU_checkdata(void)

{ //求校验和

unsigned char checkdata=0;

for(point=0;point<9,TI=1;point++)

{

checkdata=checkdata | buffer[point];

}

return(checkdata);

}

四、BCC(Block Check Character/信息组校验符号)

BCC校验其实是奇偶校验的一种,但也是经常使用并且效率较高的一种,所谓BCC校验法(block check character),就是在发送前和发送后分别把BCC以前包括ETX字符的所有字符按位异或后,按要求变换(增加或前去一个固定的值)后所得到的字符进行比较,相等即认为通信无错误,不相等则认为通信出错.

非接触卡读卡器与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,然后比较这两个值,如果相等,则接收到的卡号为合法卡号,然后按您的系统

作相应的处理。

VB代码如下:

Public Function bcc(a As String) As String

Dim b As Integer

b = 0

For i = 1 To Len(a) Step 2

b = b Xor ("&h" + Mid(a, i, 2))

Next

b = b And &HFF

相关文档
最新文档