#include<stdio.h>
#include<string.h>
//校验省份代码
/** * <pre> * 省、直辖市代码表: *     11 : 北京  12 : 天津  13 : 河北       14 : 山西  15 : 内蒙古   *     21 : 辽宁  22 : 吉林  23 : 黑龙江     31 : 上海  32 : 江苏   *     33 : 浙江  34 : 安徽  35 : 福建       36 : 江西  37 : 山东   *     41 : 河南  42 : 湖北  43 : 湖南       44 : 广东  45 : 广西      46 : 海南   *     50 : 重庆  51 : 四川  52 : 贵州       53 : 云南  54 : 西藏   *     61 : 陕西  62 : 甘肃  63 : 青海       64 : 宁夏  65 : 新疆   *     71 : 台湾   *     81 : 香港  82 : 澳门   *     91 : 国外 * </pre> */
const char* cityCode[35] = { "11", "12", "13", "14", "15", "21",  "22", "23", "31", "32", "33", "34", "35", "36", "37", "41", "42",  "43", "44", "45", "46", "50", "51", "52", "53", "54", "61", "62",  "63", "64", "65", "71", "81", "82", "91" }; int checkCityCode(const char* city){int i = 0;for(i = 0; i < 35; i++ ){if( memcmp(cityCode[i],city,2) == 0){ return 0;} }return 1;} //校验一个字符是否是数字
int isdigit(int c)
{return (c >= '0' && c <= '9');
}
//校验出生日期 日期格式 YYYYMMDD如"19870912"/*
身份证15位转18位原理:身份证中的年份补全,即:第六、七位之间增加“1”“9”(目前大多数是20世纪出身的),现在身份证号码位数是17位。
第18位确定:将身份证号码17位数分别乘以不同系数,为7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
将这17位数字相加除以11,得到余数。
余数只可能为0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的数为1-0-X-9-8-7-6-5-4-3-2。而这个数就是最后一位身份证号码。
*/
/**************************************************** 函 数 名: Chk18PaperId** 函数功能: 校验18位身份证号码,15位的号码需补齐18位** 输入参数:  sPaperId  身份证号** 输出参数:                ** 返回值:   0        成功*              其他     失败 ****************************************************/
int Chk18PaperId (char *sPaperId)
{   long lSumQT =0;    //加权因子int R[] ={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }; //校验码char sChecker[11]={'1','0','X', '9', '8', '7', '6', '5', '4', '3', '2'};  //检验长度if( 18 != strlen(sPaperId)) return -1;//校验数字for (int i=0; i<18; i++){if ( !isdigit(sPaperId[i]) && !(('X' == sPaperId[i] || 'x' == sPaperId[i]) && 17 == i) ){return -2;}}//校验省份代码if( checkCityCode(sPaperId) ){return -3;}//校验出生日期//验证最末的校验码for (int i=0; i<=16; i++){    lSumQT += (sPaperId[i]-48) * R[i];}if (sChecker[lSumQT%11] != sPaperId[17] ){return -5;}    return 0;
}int main()
{int rcode = 0;char *s= "111023198508126639";rcode = Chk18PaperId(s);if(rcode){printf("error, is a wrong id number");}else{printf("right,is a right id");}return 0;
}

15位的身份证号转为18位即可按同样方法来验证(如 130321860311519  ,15位,需要补为 130321XX860311519X    ,前两个XX替换为19,后一个X按规则算出来)。

上述代码中,没有加出生日期验证,这个可以自己写一个验证下出生日期。

c语言身份证号码验证相关推荐

  1. 身份证号码验证(c语言)

    身份证号码验证 描述 格式 样例 题解及注释 描述 居民身份证是18位字符的编码,每个人的编码都是唯一的,校验规则如下: ∑(ai*wi)mod 11 = 1 i表示号码字符从左至右包括校验码字符在内 ...

  2. 身份证号码验证验证 js_验证我的身份。 如果你可以的话…

    身份证号码验证验证 js I frequently hear questions like "How to implement authentication in an Android ap ...

  3. javascript身份证号码验证函数支持带x

    //--身份证号码验证-支持新的带x身份证 function isIdCardNo(num)  {     var factorArr = new Array(7,9,10,5,8,4,2,1,6,3 ...

  4. 身份证号码验证-支持新的带x身份证

    //--身份证号码验证-支持新的带x身份证 function isIdCardNo(num)  {     var factorArr = new Array(7,9,10,5,8,4,2,1,6,3 ...

  5. C#实现身份证号码验证的方法

    本文实例讲述了C#实现身份证号码验证的方法.分享给大家供大家参考.具体实现方法如下: 随着现在互联网的发展,越来越多的注册用户的地方都用到了身份证,那么对于输入的身份证如何验证呢?看下面的代码,其实很 ...

  6. .net身份证号码验证

    using System; /// <summary>/// Summary description for IDCardValid/// </summary>public c ...

  7. 正则实现二代身份证号码验证详解

    Start 开发过程中,常常需要对一些输入信息进行有效性验证,使用正则表达式进行校验是最简单.效率最高的方式了,下面就来看看15/18位身份证号码验证的正则表达式吧. 一: IdCodeValid:f ...

  8. 身份证号码验证——C语小程序言

    身份证号码验证--C语小程序言 #include <stdio.h> int main(){int a, b, num = 0, sum = 0;int arr[17] = {0};int ...

  9. java对台湾同胞身份证号码验证

    package com.yt.eos.common.enumclass;import org.apache.commons.lang3.StringUtils;/*** 台湾同胞身份证号码验证* @a ...

  10. 身份证号码验证(转)

    文章出处: http://dengo.org/archives/941 不少大的游戏注册时都要输入身份证号码,来限制未成年人,配合所谓的反沉迷系统,账号注册环节注重的是快捷,所以身份证验证都不是真实的 ...

最新文章

  1. 建立循环单链表(头插法)
  2. ECCV2020最佳论文 | 全面解析光流计算模型RAFT
  3. Linux --Solr 安装/配置
  4. 11.10错题集(7-函数)
  5. USTC English Club Note20211212
  6. python动态_python的动态性和_slot_
  7. rasa聊天机器人_Rasa-X是持续改进聊天机器人的独特方法
  8. imagick php 缩放,php使用imagick模块实现图片缩放、裁剪、压缩示例
  9. SharePoint 2013 List 备份使用
  10. java语言中的类可以_java 语言中的类
  11. 执行公式_一学就会,一吃就瘦,超简单又好执行的减肥食谱公式!
  12. 在Magento首页显示新产品怎么设置
  13. 程序员的代码写的再牛也没有马伊琍文章的分手语牛!
  14. clientkey(ClientKeyt利用)
  15. Centos7 自动使用葵花8号卫星图片作为桌面壁纸
  16. 全新一代智慧园区数字孪生解决方案,为园区运营商和集成商赋能
  17. 清除 input 的历史记录
  18. 文明与征服汉尼拔阵容技能推荐
  19. 网吧服务器哪个好稳定,网吧服务器不应盲目追高新:够用稳定就好
  20. OpenGL ES 帧缓冲区位块传送(Blit)

热门文章

  1. U盘病毒 System Volume Information.exe删不掉
  2. 解决Win 10桌面 IE 图标消失问题的注册表代码
  3. java获得文件的md5码_java获取文件md5码
  4. exdoll机器人_打造国内领先的定制化人工智能机器人品牌, EXDOLL新品惊艳亮相...
  5. MapXtreme+Asp.net 动态轨迹(请求大神指点)
  6. zabbix离线安装
  7. 一位码农的人生自述(四十九)------大二学年自我总结
  8. Electron无边框模式下禁止双击最大化窗口
  9. python里value是什么意思_关于Python 字典里的value
  10. 什么是OneData?阿里数据中台实施方法论解读