验证shenfenzheng合法性

1.实现代码如下

/**
     * 验证合法性
     */
    function checkIdCard($idcard){
        $City = array(11=>"北京",
        	12=>"天津",
        	13=>"河北",
        	14=>"山西",
        	15=>"内蒙古",
        	21=>"辽宁",
        	22=>"吉林",
        	23=>"黑龙江",
        	31=>"上海",
        	32=>"江苏",
        	33=>"浙江",
        	34=>"安徽",
        	35=>"福建",
        	36=>"江西",
        	37=>"山东",
        	41=>"河南",
        	42=>"湖北",
        	43=>"湖南",
        	44=>"广东",
        	45=>"广西",
        	46=>"海南",
        	50=>"重庆",
        	51=>"四川",
        	52=>"贵州",
        	53=>"云南",
        	54=>"西藏",
        	61=>"陕西",
        	62=>"甘肃",
        	63=>"青海",
        	64=>"宁夏",
        	65=>"新疆",
        	71=>"台湾",
        	81=>"香港",
        	82=>"澳门",
        	91=>"国外");
        $iSum = 0;
        $idCardLength = strlen($idcard);
        //长度验证
        if(!preg_match(‘/^\d{17}(\d|x)$/i‘,$idcard) and !preg_match(‘/^\d{15}$/i‘,$idcard)){
              return false;
        }
        //地区验证
        if(!array_key_exists(intval(substr($idcard,0,2)),$City)){
             return false;
        }
        // 15位验证生日,转换为18位
        if ($idCardLength == 15){
              $sBirthday = ‘19‘.substr($idcard,6,2).‘-‘.substr($idcard,8,2).‘-‘.substr($idcard,10,2);
              $d = new DateTime($sBirthday);
              $dd = $d->format(‘Y-m-d‘);
              if($sBirthday != $dd){
                  return false;
              }
              $idcard = substr($idcard,0,6)."19".substr($idcard,6,9);//15to18
              $Bit18 = getVerifyBit($idcard);//算出第18位校验码
              $idcard = $idcard.$Bit18;
        }
        // 判断是否大于2078年,小于1900年
        $year = substr($idcard,6,4);
        if ($year<1900 || $year>2078 ){
            return false;
        }
        //18位处理
        $sBirthday = substr($idcard,6,4).‘-‘.substr($idcard,10,2).‘-‘.substr($idcard,12,2);
        $d = new DateTime($sBirthday);
        $dd = $d->format(‘Y-m-d‘);
        if($sBirthday != $dd){
            return false;
        }

        //编码规范验证
        $idcard_base = substr($idcard,0,17);
        if(strtoupper(substr($idcard,17,1)) != $this->getVerifyBit($idcard_base)){
             return false;
        }

        return $idcard;
    }

    // 计算校验码,根据国家标准GB 11643-1999
    function getVerifyBit($idcard_base){
        if(strlen($idcard_base) != 17){
            return false;
        }
        //加权因子
        $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
        //校验码对应值
        $verify_number_list = array(‘1‘, ‘0‘, ‘X‘, ‘9‘, ‘8‘, ‘7‘, ‘6‘, ‘5‘, ‘4‘,‘3‘, ‘2‘);
        $checksum = 0;
        for ($i = 0; $i < strlen($idcard_base); $i++){
            $checksum += substr($idcard_base, $i, 1) * $factor[$i];
        }
        $mod = $checksum % 11;
        $verify_number = $verify_number_list[$mod];
        
        return $verify_number;
    }
时间: 2024-10-06 10:16:17

验证shenfenzheng合法性的相关文章

javascript 通过Date对象验证日期合法性

通常来说,javascript验证日期的有效性可以通过正则判断 但正则表达式无法精准验证日期的有效性,你无法通过正则表达式判断出1900-02-29是非法日期而2000-02-29是合法日期,而且正则表达式匹配起来比较繁琐. 要想精确验证,最容易想到的方法就是通过月份判断日期是否合法(1~28/29/30/31),你可以用一个数组表示每月的天数,如daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31],但你会发现daysInMonth[1]这个值可能是

使用CAS登录模块连接数据库验证用户合法性

使用CAS登录模块连接应用数据库验证用户合法性 关于如何配置CAS登录模块集成到开发的Web Application请看这里: http://blog.csdn.net/jia20003/article/details/49683827 基于cas server 3.5.0版本配置实现. 这里我们主要讲述如何利用已经存在的用户数据表user_table中的username与password两个字段,实现用户从CAS模块登录时候查询我们应用数据库basicweb中的user_table表.验证用户

socketserver和socket的补充(验证客户端合法性)

一.socket的补充 1.参数 socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) 参数说明: family 地址系列应为AF_INET(默认值ipv4),AF_INET6(ipv6),AF_UNIX,AF_CAN或AF_RDS. (AF_UNIX 域实际上是使用本地 socket 文件来通信) type 套接字类型应为SOCK_STREAM(默认值,tcp协议),SOCK_DGRAM(udp协议),SOCK_R

SQL Server 验证身份证合法性函数(使用VBScript.RegExp)

原文:SQL Server 验证身份证合法性函数(使用VBScript.RegExp) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wzy0623/article/details/53895680 -- 建立正则表达式测试函数 CREATE FUNCTION dbo.RegExpTest ( @source VARCHAR(5000), --需要匹配的源字符串 @regexp VARCHAR(1000), --正则表达式 @ignorecas

.Net Core Web Api使用模型验证验证参数合法性

原文:.Net Core Web Api使用模型验证验证参数合法性 在接口开发过程中免不了要去验证参数的合法性,模型验证就是帮助我们去验证参数的合法性,我们可以在需要验证的model属性上加上Data Annotations特性后就会自动帮我们在action前去验证输入数据的合法性. 1.定义一个Person类 public class PersonDto { public string Name { get; set; } public string Phone { get; set; } p

Delphi 7验证XML合法性(利用DTD、XSD)

拥有正确语法的XML被称为“形式良好”的XML.通过DTD验证的XML是“合法”的XML.DTD(文档类型定义)的作用是定义XML 文档的合法构建模块.它使用一系列的合法元素来定义文档结构.XML Schema是基于XML的DTD替代者.XML Schema描述XML文档的结构.XML Schema语言也称作XML Schema定义(XML Schema Definition,XSD).        PowerDesigner是Sybase公司的CASE工具集,也可以用来设计XML模型.在这里

SocketServer模块,hmac模块验证client合法性

hmac模块: 1.模块初识: import hmac # h = hmac.new() #括号里要给它连个bytes类型,一个是自定义的secret_key,一个是你想进行加密的bytes # 密文 = h.digest() # hmac.compare_digest() #括号内传另外一个密文,看是否相等 h = hmac.new(b'secret',b'382835896') digest = h.digest() print(digest) #>>>> b'\xa4<

Linux学习-shell利用正则表达式验证邮箱合法性

引文:在今天这个时代,Email已经成为一种重要的通信方式.给导师发邮件,学术研究之间的交流,etc.常常用到Email,然而Email的验证却有点小难度,下面给出一个在Linux下使用shell脚本编写的一个实例. linux中将正则表达式和sed.gawk结合起来,功能非常强大.我说的是真的,没骗你的,好好学吧. 邮箱验证 Email地址的基本格式为: username@hostname 1.username部分模式匹配 username的值可以用字符数子字符以及以下特殊字符: 点号 单破折

使用正则表达式验证手机号码合法性

实现效果: 知识运用: 实现代码: private void button1_Click(object sender, EventArgs e) { if (IsMobile(textBox1.Text.ToString())) MessageBox.Show("手机号码正确"); else MessageBox.Show("输入的手机号不正确"); } //验证方法 public bool IsMobile(string str_mobile) { return