PHP身份证校验码计算方法


Posted in PHP onAugust 10, 2016

中国(大陆)公民身份证号码每一位所代表的意义,网上很多文章都有介绍,在此就不多说。其中身份证号码的最后一位是校验码,跟据前17位计算得到。算法大 概是这样:把前17位的每一个数字和一串加权因子相乘,再计算这些乘积的和;把这些乘积的和模11得到的数字作为序号,最后在一个校验码串中提取出与序号 相对应的字符。当然,网上也有不少的文章教大家计算这个校验码,下面我们将尝试用PHP语言来完成这一工作,也许可以用于PHP开发中,如校验用户的身份证号码是否正确。

假设某中国(大陆)公民的身份证号码前17位是这个:44010221990101001(注:此人出生于2199年),那么我们跟据上面的算法尝试写几行PHP代码来完成校验码的计算。为了能让大家更容易理解,我使用了较简单的语句,请看代码:

<?php
//身份证号码前17位,可以从各种数据源中获得(如数据库、用户提交的表单等)
$body = '44010221990101001';
//加权因子
$wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
//校验码串
$ai = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
//按顺序循环处理前17位
for ($i = 0;$i < 17;$i++) {
//提取前17位的其中一位,并将变量类型转为实数
$b = (int) $body{$i};
//提取相应的加权因子
$w = $wi[$i];
//把从身份证号码中提取的一位数字和加权因子相乘,并累加
$sigma += $b * $w;
}
//计算序号
$number = $sigma % 11;
//按照序号从校验码串中提取相应的字符。
$check_number = $ai[$number];
//输出
echo $body.$check_number;
?>

运行以上代码之后,可以算出该身份证的校验码为9。大家可以用自己身份证的前17位试试。

如果你明白上面的例子的话,就可以把这段代码的一些语句合并,去除没必要的变量,优化得到如下代码:

<?php
$body = '44010221990101001';
$wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
$ai = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
for ($i = 0;$i < 17;$i++) {
$sigma += ((int) $body{$i}) * $wi[$i];
}
echo $body.$ai[($sigma % 11)];
?>

以上所述是小编给大家介绍的PHP身份证校验码计算方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
在Windows中安装Apache2和PHP4的权威指南
Oct 09 PHP
php的header和asp中的redirect比较
Oct 09 PHP
php 三维饼图的实现代码
Sep 28 PHP
关于PHP递归算法和应用方法介绍
Apr 15 PHP
PHP中上传多个文件的表单设计例子
Nov 19 PHP
Thinkphp调用Image类生成缩略图的方法
Mar 07 PHP
php获取远程文件的内容和大小
Nov 03 PHP
PHP 微信支付类 demo
Nov 30 PHP
thinkPHP内置字符串截取函数用法详解
Nov 15 PHP
php使用GD2绘制几何图形示例
Feb 15 PHP
PHP 记录访客的浏览信息方法
Jan 29 PHP
PHP排序二叉树基本功能实现方法示例
May 26 PHP
PHP5.4起内置web服务器使用方法
Aug 09 #PHP
PHP Filter过滤器全面解析
Aug 09 #PHP
学习PHP Cookie处理函数
Aug 09 #PHP
利用PHP命令行模式采集股票趋势信息
Aug 09 #PHP
PHP怎样用正则抓取页面中的网址
Aug 09 #PHP
php阳历转农历优化版
Aug 08 #PHP
php+jQuery+Ajax简单实现页面异步刷新
Aug 08 #PHP
You might like
PHP 数字左侧自动补0
2008/03/31 PHP
PHP判断变量是否为0的方法
2014/02/08 PHP
javascript 精粹笔记
2010/05/09 Javascript
js实现的切换面板实例代码
2013/06/17 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
jQuery过滤选择器详解
2015/01/13 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
2016/06/20 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
2016/08/15 Javascript
bootstrap轮播图示例代码分享
2017/05/17 Javascript
详解A标签中href=&quot;&quot;的几种用法
2017/08/20 Javascript
JavaScript实现AOP详解(面向切面编程,装饰者模式)
2017/12/19 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
2018/08/30 Javascript
JavaScript实现连连看连线算法
2019/01/05 Javascript
javascript头像上传代码实例
2019/09/28 Javascript
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
javascript实现贪吃蛇游戏(娱乐版)
2020/08/17 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
Python应用库大全总结
2018/05/30 Python
Numpy数组array和矩阵matrix转换方法
2019/08/05 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
2019/11/20 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
python怎么判断模块安装完成
2020/06/19 Python
python中的unittest框架实例详解
2021/02/05 Python
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
为什么说Ruby是一种真正的面向对象程序设计语言
2012/10/30 面试题
酒店管理专业学生求职信
2013/09/27 职场文书
财务会计实习报告体会
2013/12/20 职场文书
小区门卫岗位职责
2013/12/31 职场文书
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
国际会计专业求职信
2014/08/04 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
Python深度学习之实现卷积神经网络
2021/06/05 Python