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 相关文章推荐
PHP 采集获取指定网址的内容
Jan 05 PHP
使用cookie实现统计访问者登陆次数
Jun 08 PHP
php使用curl和正则表达式抓取网页数据示例
Apr 13 PHP
取得单条网站评论以数组形式进行输出
Jul 28 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
Aug 25 PHP
基于递归实现的php树形菜单代码
Nov 19 PHP
php绘制圆形的方法
Jan 24 PHP
PHP浮点数精度问题汇总
May 13 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
Jan 19 PHP
php基于PDO连接MSSQL示例DEMO
Jul 13 PHP
利用php获得flv视频长度的实例代码
Oct 26 PHP
针对PHP开发安全问题的相关总结
Mar 22 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判断服务器是否是HTTPS连接
2013/07/05 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
PHP生成json和xml类型接口数据格式
2015/05/17 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
使用JQuery FancyBox插件实现图片展示特效
2015/11/16 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
vue项目中用cdn优化的方法
2018/01/03 Javascript
解决easyui日期时间框ie的兼容的问题
2018/03/01 Javascript
微信小程序实现文件、图片上传功能
2020/08/18 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
Javascript作用域和作用域链原理解析
2020/03/03 Javascript
JavaScript实现10秒后再次获取验证码
2020/12/02 Javascript
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
python实现图片批量剪切示例
2014/03/25 Python
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
如何将python中的List转化成dictionary
2016/08/15 Python
Python下载网络小说实例代码
2018/02/03 Python
使用python将大量数据导出到Excel中的小技巧分享
2018/06/14 Python
Python语言快速上手学习方法
2018/12/14 Python
详解Python传入参数的几种方法
2019/05/16 Python
Python3简单实现串口通信的方法
2019/06/12 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
Django中如何使用sass的方法步骤
2019/07/09 Python
基于Python中的yield表达式介绍
2019/11/19 Python
Python多线程多进程实例对比解析
2020/03/12 Python
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
MySQL面试题
2014/01/12 面试题
优秀村官事迹材料
2014/01/10 职场文书
教师个人剖析材料
2014/02/05 职场文书
授权委托书
2015/01/28 职场文书
2015年网管个人工作总结
2015/05/22 职场文书
教你如何用Python实现人脸识别(含源代码)
2021/06/23 Python
CSS子盒子水平和垂直居中的五种方法
2022/07/23 HTML / CSS