Heim >Backend-Entwicklung >PHP-Tutorial >身份证及名称认证功能?

身份证及名称认证功能?

WBOY
WBOYOriginal
2016-06-13 12:03:411899Durchsuche

身份证及姓名认证功能??
客户让在网站上加上身份证及姓名认证功能
即 输入身份证号码及姓名, 能够返回一正确还是错误的信息?

不知道哪里有提供这样的接口查询功能, 请帮忙,谢谢!
------解决方案--------------------
身份证号可以通过规则检查真伪,姓名因为涉及私隐,只有公安机关等特定部门才能查询。公民身份信息不属于信息公开内容,在外网上查不到.除非你进入公安系统,才能查到。

身份证号规则
1、号码的结构
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
2、地址码(前六位数)
表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
3、出生日期码(第七位至十四位)
表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
4、顺序码(第十五位至十七位)
表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
5、校验码(第十八位数)
(1)十七位数字本体码加权求和公式
S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和
Ai:表示第i位置上的身份证号码数字值
Wi:表示第i位置上的加权因子
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
(2)计算模
Y = mod(S, 11)
(3)通过模得到对应的校验码
Y: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2
所以可以写一个函数来校验是否正确了。

<br /><?php<br />function validation_filter_id_card($id_card){ <br />    if(strlen($id_card) == 18){ <br />        return idcard_checksum18($id_card); <br />    }elseif((strlen($id_card) == 15)){ <br />        $id_card = idcard_15to18($id_card); <br />        return idcard_checksum18($id_card); <br />    }else{ <br />        return false; <br />    } <br />} <br /><br />// 计算身份证校验码,根据国家标准GB 11643-1999 <br />function idcard_verify_number($idcard_base){ <br />    if(strlen($idcard_base) != 17){ <br />        return false; <br />    } <br />    //加权因子 <br />    $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); <br />    //校验码对应值 <br />    $verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); <br />    $checksum = 0; <br />    for ($i = 0; $i < strlen($idcard_base); $i++){ <br />        $checksum += substr($idcard_base, $i, 1) * $factor[$i]; <br />    } <br />    $mod = $checksum % 11; <br />    $verify_number = $verify_number_list[$mod]; <br />    return $verify_number; <br />} <br /><br />// 将15位身份证升级到18位 <br />function idcard_15to18($idcard){ <br />    if (strlen($idcard) != 15){ <br />        return false; <br />    }else{ <br />        // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码 <br />        if (array_search(substr($idcard, 12, 3), array('996', '997', '998', '999')) !== false){ <br />            $idcard = substr($idcard, 0, 6) . '18'. substr($idcard, 6, 9); <br />        }else{ <br />            $idcard = substr($idcard, 0, 6) . '19'. substr($idcard, 6, 9); <br />        } <br />    } <br />    $idcard = $idcard . idcard_verify_number($idcard); <br />    return $idcard; <br />} <br /><br />// 18位身份证校验码有效性检查 <br />function idcard_checksum18($idcard){ <br />    if (strlen($idcard) != 18){ return false; } <br />    $idcard_base = substr($idcard, 0, 17); <br />    if (idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))){ <br />        return false; <br />    }else{ <br />        return true; <br />    } <br />} <br /><br />$idcard = '这里填写要验证的身份证号码';<br />var_dump(validation_filter_id_card($idcard));<br />?><br />

------解决方案--------------------
找银行 或者 公安局去调接口。
------解决方案--------------------
百度谷歌搜搜、这样的接口

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn