C语言实现Luhn 校验

LUHN算法,主要用来计算信用卡等证件号码的合法性。

1、从卡号最后一位数字开始,偶数位乘以2,如果乘以2的结果是两位数,将两个位上数字相加保存。

2、把所有数字相加,得到总和。

3、如果信用卡号码是合法的,总和可以被10整除

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

int main(int argc, const char * argv[]) {

    char num[30];

    while(gets(num)!=NULL){

        int len=(int)strlen(num);
        int sum=0;
        int tmp;

        for(int i=len-1;i>=0;i--)
        {
            if((len-i)%2==1)    //奇数位
                sum+=num[i]-'0';
            else                //偶数位
            {
               tmp=(num[i]-'0')*2;
                sum+=tmp>=10?tmp-9:tmp;
            }
        }

        printf("sum=%d\n",sum);
    }

    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-24 19:24:35

C语言实现Luhn 校验的相关文章

C语言中的校验算法

数据通信的校验算法核心思想:为了保证通讯数据的可靠性,通常加入校验来验证一帧数据是否有误,校验的方式有很多种,异或校验是常见的一种,你这个如2楼说的,是逐字节进行按位异或运算,结果放在最后一个字节,接收方收到数据进行同样计算,如果最后一个字节和计算结果一致,则可认为这一帧数据可信.

Java实现MD5加密和文件校验

MD5简介: MD5的全称:Message-Digest Algorithm 5(信息-摘要算法5) MD5的加密方式是一种哈希加密.一些主流的编程语言都已经实现了MD5的加密,所以如果你的程序或是系统涉及到在多种语言之间的校验,那么MD5可以是备选之一.不过因为MD5是采用哈希函数来进行的加密,所以它无关密钥,也就是说在确定了明文的情况下,MD5就可以加密.不过MD5是不可逆的,只能加密,不能解密. MD5加密字符串: public class Md5Util { // 标准的构造函数,调用m

Delphi CRC16校验算法实现(转)

循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC.它是利用除法及余数的原理来作错误侦测(Error Detecting)的.实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误. 根据应用环境与习惯的不同,CRC又可分为以下几种标准: ①CRC-12码: ②CRC-16码: ③CRC-CCITT码: ④CRC-32码. CRC-12码通常用来传送6-

身份证 、银行卡校验

/*根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码.    地址码表示编码对象常住户口所在县(市.旗.区)的行政区划代码.    出生日期码表示编码对象出生的年.月.日,其中年份用四位数字表示,年.月.日之间不用分隔符.    顺序码表示同一地址码所标识的区域范围内,对同年.月.日出生的人员编定的顺序号.

如何使用java validation api进行参数校验----Hibernate-Validation

在日常开发中,Hibernate Validator经常用来验证bean的字段,基于注解,方便快捷高效. 1. Bean Validation 中内置的 constraint 注解                                      作用 @Valid 被注释的元素是一个对象,需要检查此对象的所有字段值 @Null 被注释的元素必须为 null @NotNull 被注释的元素必须不为 null @AssertTrue 被注释的元素必须为 true @AssertFalse

银行卡算法规则

/** *Luhn校验算法校验银行卡号 *Description: 银行卡号Luhm校验 *Luhm校验规则:16位银行卡号(19位通用): *1.将未带校验位的 15(或18)位卡号从右依次编号 1 到 15(18),位于奇数位号上的数字乘以 2. *2.将奇位乘积的个十位全部相加,再加上所有偶数位上的数字. *3.将加法和加上校验位能被 10 整除. *方法步骤很清晰,易理解,需要在页面引用Jquery.js *bankno为银行卡号 */ function luhmCheck(bankno

HTML语法检测

网络上收集到的资源: HTML在线编辑//////////////////////////////////////////http://tool.oschina.net/codeformat/ 文本框中编辑您的代码,然后单击提交按钮测试结果http://www.w3school.com.cn/tiy/t.asp?f=html_basic HTML/CSS/Javascript在线代码运行工具http://www.runoob.com/runcode 在线代码测试器http://tool.pmed

Hibernate Validator注解大全

hibernate Validator 是 Bean Validation 的参考实现 .Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint. 在日常开发中,Hibernate Validator经常用来验证bean的字段,基于注解,方便快捷高效. 1. Bean Validation 中内置的 constraint 注解                                    

2019 6 14 研电赛STM32相关

---恢复内容开始--- 串口中断结束不需要清中断 https://blog.csdn.net/justsure91/article/details/80856345 MODBUS详细介绍 https://blog.csdn.net/u014234260/article/details/76986814 c语言modbus-RTU  CRC校验 https://blog.csdn.net/ma950924/article/details/82747285 C语言一行太长的换行处理 https:/