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 foreach循环使用详解与实例代码
May 08 PHP
php 输出双引号&quot;与单引号'的方法
May 09 PHP
PHP 可阅读随机字符串代码
May 26 PHP
使用PHP编写的SVN类
Jul 18 PHP
PHP加Nginx实现动态裁剪图片方案
Mar 10 PHP
Thinkphp中的volist标签用法简介
Jun 18 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
Nov 07 PHP
学习php设计模式 php实现抽象工厂模式
Dec 07 PHP
CodeIgniter钩子用法实例详解
Jan 20 PHP
CodeIgniter集成smarty的方法详解
May 26 PHP
php 调用ffmpeg获取视频信息的简单实现
Apr 03 PHP
php代码调试利器firephp安装与使用方法分析
Aug 21 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 字符串操作入门教程
2006/12/06 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
2013/12/16 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
在JavaScript中使用开平方根的sqrt()方法
2015/06/15 Javascript
javascript实现的简单计时器
2015/07/19 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
AngularJS仿苹果滑屏删除控件
2016/01/18 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
JavaScript和jquery获取父级元素、子级元素、兄弟元素的方法
2016/06/05 Javascript
js中string和number类型互转换技巧(分享)
2016/11/28 Javascript
JS实现页面进入和返回定位到具体位置
2016/12/08 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
jquery无缝图片轮播组件封装
2020/11/25 jQuery
ES6中Set和Map用法实例详解
2020/03/02 Javascript
node+vue实现文件上传功能
2020/05/28 Javascript
vue使用transition组件动画效果的实例代码
2021/01/28 Vue.js
Python3.2中的字符串函数学习总结
2015/04/23 Python
python 3.6.2 安装配置方法图文教程
2018/09/18 Python
Python运行异常管理解决方案
2020/03/09 Python
python实现手势识别的示例(入门)
2020/04/15 Python
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
int和Integer有什么区别
2013/05/25 面试题
房屋租赁合同协议书范本
2014/10/19 职场文书
骨干教师事迹材料
2014/12/17 职场文书
计算机专业自荐信范文
2015/03/26 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
Pytorch可视化的几种实现方法
2021/06/10 Python