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 file_get_contents 函数超时的几种解决方法
Jul 30 PHP
如何使用FireFox插件FirePHP调试PHP
Jul 23 PHP
php 模拟post_验证页面的返回状态(实例讲解)
Oct 28 PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
Jan 07 PHP
php 批量查询搜狗sogou代码分享
May 17 PHP
php 无限级分类 获取顶级分类ID
Mar 13 PHP
使用正则去除php代码中的注释方法
Nov 03 PHP
PHP使用PDO抽象层获取查询结果的方法示例
May 10 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
Jun 13 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
Jan 15 PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 18 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
mayfish 数据入库验证代码
2010/04/30 PHP
php求正负数数组中连续元素最大值示例
2014/04/11 PHP
php的4种常用运行方式详解
2016/12/22 PHP
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
解析jquery获取父窗口的元素
2013/06/26 Javascript
Nodejs关于gzip/deflate压缩详解
2015/03/04 NodeJs
Javascript编写2048小游戏
2015/07/07 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
js使用highlight.js高亮你的代码
2017/08/18 Javascript
基于Vue 2.0的模块化前端 UI 组件库小结
2017/12/21 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
[11:44]Ti9 OG夺冠时刻
2019/08/25 DOTA
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
Python基于模块Paramiko实现SSHv2协议
2020/04/28 Python
Python3爬虫中pyspider的安装步骤
2020/07/29 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
澳大利亚领先的美容护肤品零售商之一:SkincareStore
2018/01/22 全球购物
Footshop法国:购买运动鞋
2020/01/19 全球购物
C#笔试题和英文面试题
2013/02/07 面试题
园林设计专业毕业生求职信
2014/03/23 职场文书
官僚主义现象查摆问题整改措施
2014/10/04 职场文书
幽灵公主观后感
2015/06/09 职场文书
酒桌上的祝酒词
2015/08/12 职场文书
Golang数据类型和相互转换
2022/04/12 Golang
Win11如何默认打开软件界面最大化?Win11默认打开软件界面最大化的方法
2022/07/15 数码科技