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对gzip文件或者字符串解压实例参考
Jul 25 PHP
php 删除cookie和浏览器重定向
Mar 16 PHP
基于pear auth实现登录验证
Feb 26 PHP
PHP详解ASCII码对照表与字符转换
Dec 05 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
Aug 21 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
Jul 28 PHP
php中Array2xml类实现数组转化成XML实例
Dec 08 PHP
thinkphp备份数据库的方法分享
Jan 04 PHP
CodeIgniter表单验证方法实例详解
Mar 03 PHP
PHP7 安装event扩展的实现方法
Oct 08 PHP
laravel框架模型、视图与控制器简单操作示例
Oct 10 PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 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
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
javascript 实现map集合
2015/04/03 Javascript
javascript判断数组内是否重复的方法
2015/04/21 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
Angular ng-repeat指令实例以及扩展部分
2016/12/26 Javascript
Node.js 中exports 和 module.exports 的区别
2017/03/14 Javascript
javascript实现的图片预览功能
2017/03/25 Javascript
vue上传图片组件编写代码
2017/07/26 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
解决element-ui的下拉框有值却无法选中的情况
2020/11/07 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
Python做智能家居温湿度报警系统
2018/09/25 Python
python实现图片筛选程序
2018/10/24 Python
pytorch实现mnist数据集的图像可视化及保存
2020/01/14 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
2020/04/29 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
工地安全生产标语
2014/06/06 职场文书
酒店周年庆活动方案
2014/08/21 职场文书
借名购房协议书范本
2014/10/06 职场文书
老公保证书怎么写
2015/02/26 职场文书
公司车队管理制度
2015/08/04 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python
日元符号 ¥
2022/02/17 杂记