1. 如何用c语言实现验证码的校验
什么校验方法?
CRC检验如下:
#include<stdio.h>
int binaryToDec(char *str)
{
unsigned n=0;
while(*str!='\0')
{
if(*str<'0'||*str>'9')return -1;
n=n*2+(*str-'0');
str++;
}
return n;
}
void printBinary(int n)
{
if(n>1)printBinary(n/2);
printf("%d",n%2);
}
void main()
{
unsigned n,m,CRC=0x1A8000,fD=0x100000;
char CRC16[32];
while(1)
{
printf("输入16位校验码:");
gets(CRC16);
n=binaryToDec(CRC16);
if(n>65535)
printf("输入值过长,请重新输入\n");
else break;
}
n<<=5;//n左移5位
m=n;//m等于n
while(fD>0x20)
{
while( !(m&fD) && !(CRC&1) )//保证被除数第一位为1
{
CRC>>=1;//除数右移一位
fD>>=1;//被除数首位的标志位右移一位
}
m=m^CRC;//被除数与除数相异或
}
n+=m;//模二余数相加
printf("输出21位校验码:");
printBinary(n);
printf("\n");
getchar();
}
2. 求能实现奇偶校验的c语言程序86
奇偶校验数据是一种简单的数据校验方法,顾名思义就知道有两种方式:奇校验和偶校验。
因为计算机里面的数据形式都是通过1 和 0来存储和传输的,那么就可以通过检验一个数据串的1 的个数来判断这个数据串是否出错。
假如传输方传输的数据有奇数个1 而接收方有偶数个1 那么数据肯定出错,就可以要求对方再传送一遍。
而怎么标志传送的数据有多少个1 呢?一般的做法是在数据串的最后一位补上一个奇偶校验位,如果有奇数个1 这个校验位是1 则叫奇校验,否则叫偶校验。
好了,说完了。希望能解决你的问题。fld希望采纳我的
3. 51单片机中C语言奇偶校验位如何设置
MOV
A,
#待发数据
;数据进了A,即刻生成校验位P
MOV
C,
P
MOV
TB8,
C
;校验位送到TB8
MOV
SBUF,
A
;发送数据,以及P
上述写法,是偶校验。奇校验,需要增加一条取反指令,如下:
MOV
C,
P
CPL
C
MOV
TB8,
C
;校验位送到TB8
4. 51单片机中C语言奇偶校验位如何设置
MOV A, #待发数据 ;数据进了A,即刻生成校验位P
MOV C, P
MOV TB8, C ;校验位送到TB8
MOV SBUF, A ;发送数据,以及P
上述写法,是偶校验。奇校验,需要增加一条取反指令,如下:
MOV C, P
CPL C
MOV TB8, C ;校验位送到TB8
5. 用c语言编写函数,实现“计算商品条形码校验位
验证算法
6. C语言编程 字符的奇校验码
c语言的字符类型是以整数的形式存储在内存中的,这个整数就是这个字符的ascii码,所以只需要将字符以整数的形式输出即可。
代码如下:
#include
int main()
{
char c;
c = getchar();
printf("%d\n", c);
return 0;
}
7. C语言编程:13位书号校验码的计算方法
#include<stdio.h>
voidmain()
{
charisbn[13];
inta=0,b=0,c,d,e,i;
scanf("%s",isbn);
for(i=0;i<12;i+=2)
a+=(isbn[i]-48);//-48是为了把字符“0~9”转换成数字0~9
for(i=1;i<12;i+=2)
b+=(3*(isbn[i]-48));
c=a+b;printf("%d ",c);
d=c%10;printf("%d ",d);
e=10-d;
printf("%d",e);//这就是计算效验码
}
之前的版本有一些错误 现在改好呃
8. 如何用C语言判断一个校验和是否超过8位
放在一个无符4字节整数里 大于了255说明超过了8位 这时把整数与上ox000000FF就去掉高位了
9. crc16校验的c语言程序
下面我们以CRC-16为例来说明任意长度数据流的CRC校验码生成过程。我们采用将数据流分成若干个8bit字符,并由低字节到高字节传送的并行方法来求CRC校验码。具体计算过程为:用一个16bit的寄存器来存放CRC校验值,且设定其初值为0x0000;将数据流的第一个8bit与16bit的CRC寄存器的高字节相异或,并将结果存入CRC寄存器高字节;CRC寄存器左移一位,最低1bit补零,同时检查移出的最高1bit,若移出的最高1bit为0,则继续按上述过程左移,若最高1bit为1,则将CRC寄存器中的值与生成多项式码相异或,结果存入CRC寄存器值;继续左移并重复上述处理方法,直到将8bit数据处理完为止,则此时CRC寄存器中的值就是第一个8bit数据对应的CRC校验码;然后将此时CRC寄存器的值作为初值,用同样的处理方法重复上述步骤来处理下一个8bit数据流,直到将所有的8bit字符都处理完后,此刻CRC寄存器中的值即为整个数据流对应的CRC校验码。
下面示出了其计算过程的流程图:
在用C语言编写CRC校验码的实现程序时我们应该注意,生成多项式 对应的十六进制数为0x18005,由于CRC寄存器左移过程中,移出的最高位为1时与 相异或,所以与16bit的CRC寄存器对应的生成多项式的十六进制数可用0x8005表示。下面给出并行处理8bit数据流的C源程序:
unsigned short crc_dsp(unsigned short reg, unsigned char data_crc)
//reg为crc寄存器, data_crc为将要处理的8bit数据流
{
unsigned short msb; //crc寄存器将移出的最高1bit
unsigned short data;
unsigned short gx = 0x8005, i = 0; //i为左移次数, gx为生成多项式
data = (unsigned short)data_crc;
data = data << 8;
reg = reg ^ data;
do
{
msb = reg & 0x8000;
reg = reg << 1;
if(msb == 0x8000)
{
reg = reg ^ gx;
}
i++;
}
while(i < 8);
return (reg);
}
以上为处理每一个8bit数据流的子程序,在计算整个数据流的CRC校验码时,我们只需将CRC_reg的初值置为0x0000,求第一个8bit的CRC值,之后,即可将上次求得的CRC值和本次将要处理的8bit数据作为函数实参传递给上述子程序的形参进行处理即可,最终返回的reg值便是我们所想得到的整个数据流的CRC校验值。
10. 51单片机中C语言奇偶校验位如何设置
在51单片机中,只要将一个值传送给累加器,这个数的奇偶校验值就会影响P。一般而言,在串行通讯中为确保传输数的准确,用到校验位的情况比较多。以下是程序代码:
#include<reg51.h>
main()
{
char dat;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0xd0;
while(1)
{
dat++;
ACC=dat;
TB8=P; //校验位送第九数据位TB8
SBUF=ACC;
while(TI==0);
TI=0;
}
}