• 算法
  • 在Linux中用C语言实现
  • 用Bash实现

算法

令身份证号码的每一位和与之对应的位权值(从左到右分别对应 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2)相乘,得到17个乘积求和,得到的和对11取余,与余数对应的符号便是身份证号第18位(余数按0~10的顺序分别对应 1 0 X 9 8 7 6 5 4 3 2)

在Linux中用C语言实现

进入vi编辑器编辑源代码,我把文件命名为 chkID.c

vi chkID.c

按下 i 键,来输入代码

#include <stdio.h>
void main(){int CHK[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}, MOD, END, i, SUM=0;char ID[18];//存储17位的字符串需要18个字符型单元,最后一位存储结束符\0//ID字符数组存储身份证号,CHK数组存储每位的加权因子,END保存最后计算出的身份证尾号printf("输入你的身份证号的前17位: "); scanf("%s", ID);printf("你的身份证号前17位是: "); printf("%s\n", ID);printf("每一位的加权因子为: %d", CHK[0]); for(i=1; i<=16; i++)printf(",%d", CHK[i]); printf("\n");for(i=0; i<=16; i++)SUM+=(ID[i]-48)*CHK[i]; MOD=SUM%11;//字符型数字转化为整型需要减48//身份证号前17位每一位与对应的加权因子相乘后求和,求出的和对11取余得到模,根据模,对应得到末尾的校验码switch(MOD){case 0:END=1;break; case 1:END=0;break; case 2:END=10;break; case 3:END=9;break;case 4:END=8;break; case 5:END=7;break; case 6:END=6;break; case 7:END=5;break;case 8:END=4;break; case 9:END=3;break; case 10:END=2;break;}printf("身份证号的最后一位为: "); if(MOD==10)printf("X\n");else printf("%d\n", END);
}

按下 Esc 键,输入 :wq 保存文件并退出
使用gcc进行编译,-o参数用来指定生成程序的名字

gcc chkID.c -o chkID

运行程序

./chkID

用Bash实现

同上进入vi编辑代码,我把文件命名为 chkID.sh ,代码如下

#!/bin/bash
read -p "Enter the first 17 digits of your ID number: " ID
CHK=(7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2) #数组
echo "The first 17 digits of your ID number are $ID"
echo "The power of every digit is ${CHK[*]}" #输出数组全部元素
SUM=0
for i in {0..16} ; do #计数循环let SUM=$SUM+${ID:i:1}*${CHK[i]} #当变量作为索引值时前面可不加$
done
let MOD=SUM%11
echo -en "The last digit of your ID number is "
case $MOD in0) echo "1";; 1) echo "0";; 2) echo "X";; 3) echo "9";;4) echo "8";; 5) echo "7";; 6) echo "6";; 7) echo "5";;8) echo "4";; 9) echo "3";; 10) echo "2";;
esac

运行程序

bash chkID.sh

C语言和Bash脚本实现身份证号码尾号验证相关推荐

  1. 身份证号码的正则验证

    手机号码,身份证号码的正则验证是我们开发中很常用到的东西,而大部分的身份证号码验证也只不过只是验证了身份证号码的长度及几个关键数字的匹配. 怎样能更加完善的验证身份证号码呢?如下代码可以进一步的提高身 ...

  2. 代码整洁之道------它山之玉可以重构:身份证号码解析、验证工具(第一天)

    首先感谢原作者的代码: < 面向对象的15位.18位中国大陆身份证号码解析.验证工具>. 如果有版权问题,敬请告知. 原代码给了我很好的起点,是的,这些代码都是玉,我在这只是再琢磨琢磨. ...

  3. js身份证号码,电话号码验证

    这是jsp页面调用下面的js代码的一段脚本(整理收集的资料) <script type="text/javascript"> function verfiy(){ va ...

  4. 身份证号码填写合法性验证的小方法,参数就是身份证号码

    LBCP.ZHXZ.CGJ.idCardjiaoyan = function(idCard){     var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, ...

  5. js身份证号码带*号处理

    let idcard = "532225695884695286"; let str = idcard.replace(/(\w{2})\w*(\w{2})/, '$1****** ...

  6. linux内核与bash脚本接囗,Bash脚本编程之脚本基础和bash配置文件

    脚本基础 不严谨地说,编程语言根据代码运行的方式,可以分为两种方式: 编译运行:需要先将人类可识别的代码文件编译成机器可运行的二进制程序文件后,方可运行.例如C语言和Java语言. 解释运行:需要一个 ...

  7. Bash脚本编程学习笔记02:脚本基础和bash配置文件

    脚本基础 参考资料:Shell Scripts (Bash Reference Manual) 不严谨地说,编程语言根据代码运行的方式,可以分为两种方式: 编译运行:需要先将人类可识别的代码文件编译成 ...

  8. linux 脚本加上行号,关于linux:如何在执行bash脚本时显示行号

    我有一个测试脚本,它有很多命令,会产生很多输出,我使用set -x或set -v和set -e,所以当出现错误时脚本会停止.但是,我仍然很难找到执行停止的行以定位问题.是否有一种方法可以在执行每一行之 ...

  9. .net身份证号码验证

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

最新文章

  1. 深度学习系列:深度学习在腾讯的平台化和应用实践
  2. C++如何把字符串转化为数字?
  3. 架构师养成之道-02-jvm原理
  4. 默认构造函数和拷贝构造函数
  5. 腾讯云cloudlite认证_【腾讯云】考个证...大数据开发工程师认证
  6. 为什么内联函数,构造函数,静态成员函数不能为virtual函数
  7. MyCat分布式数据库集群架构工作笔记0011---高可用_主从读写分离配置
  8. linux更改root密码_如何在Linux中更改root密码
  9. 【C++】std::是什么?
  10. mycat基础实验之主从配置读写分离和分表
  11. 干货分享:给视频翻译字幕可以用哪些软件?
  12. 5568 -- 【BJOI2018】治疗之雨
  13. 模拟器修改hosts解析
  14. uiautomatorviewer 提示 Error obtaining UI hierarchy 的解决办法
  15. 2020年煤矿安全监测监控实操考试视频及煤矿安全监测监控作业模拟考试
  16. 迟到的2018年终总结
  17. 【电力预测】基于matlab GUI灰色模型电力负荷预测【含Matlab源码 769期】
  18. php数组时按值传递还是按地址传递
  19. 性能测试-工具篇:jmeter - Header管理器
  20. 创建商业思维导图的便利工具有哪些

热门文章

  1. 提高网站提高网站广告点击率的几个可行方法
  2. Flutter项目调用APP原声页面,使用iOS的Framework,安卓的aar,so文件
  3. ESP32配置mqtt arduino
  4. 用手机远程登录电脑,太高端了。。。。
  5. java发送信息到通知栏
  6. node nvm 安装及使用
  7. 微信支付商户接入(一)
  8. mysql中计算百分比
  9. 十个人有多少种不同组合?
  10. 机房温度可视化:物联网下的数据中心环境运维新方式