C语言:生成校验码

题目描述

某商品的编号是有11位字符串组成,前10位的每一位都是一个0~9之间的数字,最后一位是一个校验码。校验码为0~10之间的数值,如果等于10,用大写“X”表示。校验规则如下:

sum=∑(ci×wi),其中ci是字符对应的数值,wi是对应的位权。将和值对11取余,如果余数为0,则表示该编号正确,否则编号有误。

从第一位开始到第11位的位权依次为:{29,23,19,17,13,11,7,5,3,2,1}

例如编号“15975374136”,依据上述规则,其sum=1×29+5×23+9×19+7×17+5×13+3×11+7×7+4×5+1×3+3×2+6×1=616,
616 mod 11=0,所以这是一个正确的编码。
类似的:3574186412X,78952147854,65892147891,96547123698都是正确的编码。
现在,给定这个编码的前面10位,请编程求出第11位校验码。如果校验码等于10的话,用大写的“X”表示。

提示

输入输出格式

输入格式

一行,由10个数字组成的字符串

输出格式

一个字符,表示所求的校验码

#include <stdio.h>
#include <string.h>
#include <math.h>

int check(char arr[11])
{
	int weight[11]={29,23,19,17,13,11,7,5,3,2,1};
	int sum=0;
	int i;
	for(i=0;i<10;i++)
	{
		sum+=(arr[i]-'0')*weight[i];
	}
	
	int reminder=sum%11;
	
	if(reminder==0)
	{
		return 0;
	}else if(reminder==10)
	{
		return 10;
	}else{
		return 11-reminder;
	}
}

int main()
{
	char str[11];
	gets(str);
	
	int end=check(str);
	if(end==10)
	{
		printf("%c",'X');
	}else{
		printf("%d",end);
	}
	return 0;
}

相关推荐

  1. C语言生成校验

    2024-02-19 11:48:01       25 阅读
  2. C语言:ISBN校验

    2024-02-19 11:48:01       33 阅读
  3. CRC8校验算法源——C语言

    2024-02-19 11:48:01       9 阅读
  4. C语言实现CRC校验

    2024-02-19 11:48:01       39 阅读
  5. C#实现批量生成二维

    2024-02-19 11:48:01       34 阅读
  6. 生成正态分布数据的C语言实现

    2024-02-19 11:48:01       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-19 11:48:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-19 11:48:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-19 11:48:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-19 11:48:01       20 阅读

热门阅读

  1. 【SpringBoot5】SpringBoot如何找到我们写的类的

    2024-02-19 11:48:01       27 阅读
  2. android pdf框架-3,基于recyclerview修改

    2024-02-19 11:48:01       29 阅读
  3. 关于Http和Https

    2024-02-19 11:48:01       27 阅读
  4. CF1781 D. Many Perfect Squares [数学题]

    2024-02-19 11:48:01       31 阅读
  5. OpenCV中saturate_cast模板函数

    2024-02-19 11:48:01       30 阅读
  6. 1.函数模板基础

    2024-02-19 11:48:01       28 阅读
  7. 计算机网络课后第一章问答题

    2024-02-19 11:48:01       25 阅读