PHP验证身份证号码是否合法,识别地区性别信息

<?php

/**
*身份证规则说明:
*①1-2 升级行政区代码
*②3-4 地级行政区划分代码
*③5-6 县区行政区分代码
*④7-10 11-12 13-14 出生年、月、日
*⑤15-17 顺序码,同一地区同年、同月、同日出生人的编号,奇数是男性,偶数是女性
*⑥18 校验码,如果是0-9则用0-9表示,如果是10则用X(罗马数字10)表示
*/

$arr = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
$result = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]; //余数参照表,最后一位校验码

$code = trim($_GET['code']);

$count = 0;
foreach ($arr as $key => $val) {
    $num = substr($code, $key, 1);
    $count += $num * $val;
    if($key == 16)
        $sex = intval($num%2==0)+1;  //$sex 1男 2女
}

$n = intval($count % 11);
$a = substr($code, -1, 1);
if (!in_array($n, array_flip($result)) || $result[$n] != strtoupper($a)) {
    die('身份证不合法');
}

echo '合法';

 

转载于:https://my.oschina.net/tanwen/blog/520642

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值