现在的位置: 首页 > 综合 > 正文

双模校验算法

2013年10月06日 ⁄ 综合 ⁄ 共 663字 ⁄ 字号 评论关闭

今天写程序遇到了算法,刚开始不太明白,后来去网上查,能查到的资料也很少,大部分都是通过写的一个shell实现的,并且都如出一辙,可能都是对着抄袭的吧,大笑

说明:以下资料部分是从网上搜索得到,只是引用,不做商业用途,如有侵权,请联系本人。

1.首先介绍模10、11双模算法。双模算法是国标的其中一个,即GBT 17710,可以防止在抄录和键入字符串时产生的错误。本标准规定了一组校验字符系统,它可以防止在复制或者键入数据时产生错误,包括单一字符录入错误(比如12345错录为02345)、所有的或者几乎所有的单一字符兑换位置错误(12345错录为12354)、所有或者几乎所有的循环移位错误,大部分的双替换错误(12345错录为22356),大部分的其它错误等

2.算法公式及解释如下(网上找的,是对的):

 

3.附上C源码:

 

int  Mode(char * str){
	int m=10;
	int number=0;
	int n=0;
	int p=m;
	int i=0;
	int j=0;
	j = strlen(str);
	for(i=0;i<j;i++){
  	number=(int)(str[i]-48);
  	p=((n=(p+number)%m)?n:m)*2%(m+1);
  	printf("good[%d]number[%d]\r\n",i,number);
	}
	if(p<2){
	p=1-p;
	}else{
	p=11-p;
	}
	return p;/*返回一个校验数字*/
}

PS:这个源码是根据那个shell改造的,字符串全为数字时适用,如有同学有时间可以继续改造下,没时间了,要下班了,呵呵。

抱歉!评论已关闭.