php怎么判定身份证是否有效

worktile 其他 359

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    要判断身份证是否有效,需要进行以下步骤:

    1. 验证身份证号码格式是否正确:身份证号码是由18位数字组成的,最后一位可能是数字或者X(表示罗马数字10)。可以使用正则表达式来进行验证,例如使用 “/^\d{17}[\dX]$/i” 来判断是否匹配。

    2. 验证身份证号码的生日是否合法:身份证号码的前14位是出生日期,根据年份、月份和日期来进行验证。可以使用 DateTime 类来进行日期的判断,比较方便。

    3. 验证身份证号码的校验位是否正确:身份证号码的最后一位是校验位,通过校验算法来进行判断。身份证号码的第18位是权重位,根据前17位的值和权重位进行计算,然后与校验位进行比较。

    以下是一个简单的 PHP 函数,用于判断身份证号码是否有效:

    “`php
    function validateIDCard($idCard) {
    // 验证身份证号码格式
    if (!preg_match(“/^\d{17}[\dX]$/i”, $idCard)) {
    return false;
    }

    // 验证出生日期是否合法
    $birthDate = substr($idCard, 6, 8);
    if (!DateTime::createFromFormat(‘Ymd’, $birthDate)) {
    return false;
    }

    // 验证校验位是否正确
    $wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3);
    $sum = 0;
    for ($i = 0; $i < 17; $i++) { $sum += $idCard[$i] * $wi[$i]; } $checkCode = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); if ($checkCode[$sum % 11] != $idCard[17]) { return false; } return true;}// 示例用法:$idCard = '身份证号码';if (validateIDCard($idCard)) { echo "身份证号码有效";} else { echo "身份证号码无效";}```通过以上的方法,可以判断身份证号码是否有效。需要注意的是,该方法只能判断号码是否符合规则,不能保证该身份证号码真实存在。

    2年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在 PHP 中判断身份证是否有效可以使用一些常用的方法。下面是一些常见的方法:

    1. 长度检查:中国大陆的身份证号码一般为18位,根据这个规则,可以使用 `strlen` 函数来检查身份证号码的长度,如果长度不为18,即可判定为无效。

    2. 格式检查:中国大陆的身份证号码由前17位数字和最后一位校验位组成。校验位的计算方法有统一的算法。可以使用正则表达式来判断前17位是否全部为数字,最后一位是否为正确的校验位。

    3. 出生日期校验:根据身份证号的结构,前六位为身份证持有者的出生年月日信息。可以提取出这个字符串,并使用 `checkdate` 函数来检查日期的合法性。

    4. 地区码校验:身份证号码的第1-2位代表省份,有一个特定的编码列表。可以使用数组或者数据库来存储这些编码,然后通过匹配来验证身份证的前两位是否合法。

    5. 校验位校验:身份证号码的最后一位是校验位,根据固定的算法可以计算出校验位应该是什么,然后和身份证号码最后一位进行比较,如果一致则判定为有效。

    需要注意的是,这只是一些常用的方法,并不能完全确保身份证号码的有效性,因为有一些特殊情况可能会存在。比如假冒他人身份证号码、被篡改的身份证号码等。如果需要更精确的判断,建议使用第三方的身份证校验接口或者调用相关的身份证校验工具库。

    2年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    要判断身份证是否有效,需要使用一些方法和流程。以下是使用PHP语言进行身份证有效性判断的方法和操作流程。

    1. 验证身份证号码的长度和格式
    身份证号码一般有15位和18位两种格式,要验证身份证号码的长度和格式,可以通过正则表达式来进行匹配。

    以下是一个验证身份证号码长度和格式的示例代码:

    “`php
    function validateIDCard($id_card)
    {
    // 验证身份证号码长度
    if (strlen($id_card) != 15 && strlen($id_card) != 18) {
    return false;
    }

    // 验证身份证号码格式
    $pattern = “/^\d{17}[\dXx]|\d{15}$/”;
    if (!preg_match($pattern, $id_card)) {
    return false;
    }

    return true;
    }
    “`

    2. 验证身份证号码中的地区码
    身份证号码前6位是地区码,可以用来验证身份证号码所属地区是否合法。可以定义一个地区码数组,使用地区码来进行判断。

    以下是一个验证身份证号码中地区码的示例代码:

    “`php
    function validateAreaCode($id_card)
    {
    $area_code = substr($id_card, 0, 6);
    // 定义合法的地区码数组
    $valid_area_codes = array(‘110000’, ‘120000’, ‘130000’, …);

    // 验证地区码是否合法
    if (!in_array($area_code, $valid_area_codes)) {
    return false;
    }

    return true;
    }
    “`

    3. 验证身份证号码中的生日信息
    身份证号码中的生日信息包括出生年份、出生月份和出生日期,可以通过正则表达式进行匹配验证。

    以下是一个验证身份证号码中生日信息的示例代码:

    “`php
    function validateBirthday($id_card)
    {
    // 提取出生年份、月份和日期
    if (strlen($id_card) == 15) {
    $year = ’19’.substr($id_card, 6, 2);
    $month = substr($id_card, 8, 2);
    $day = substr($id_card, 10, 2);
    } else {
    $year = substr($id_card, 6, 4);
    $month = substr($id_card, 10, 2);
    $day = substr($id_card, 12, 2);
    }

    // 验证年份是否合法
    if ($year < 1900 || $year > date(‘Y’)) {
    return false;
    }

    // 验证月份是否合法
    if ($month < 1 || $month > 12) {
    return false;
    }

    // 验证日期是否合法
    if (!checkdate($month, $day, $year)) {
    return false;
    }

    return true;
    }
    “`

    4. 验证身份证号码中的校验码
    身份证号码最后一位是校验码,用来验证身份证号码的合法性。校验码的计算方法是根据身份证号码前17位进行计算,然后与身份证号码最后一位进行比较。

    以下是一个计算校验码的示例代码:

    “`php
    function validateCheckCode($id_card)
    {
    // 提取身份证号码前17位
    $id_card_17 = substr($id_card, 0, 17);

    // 计算身份证号码的校验码
    $check_code = ”;
    if (strlen($id_card) == 18) {
    $weighted_factors = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
    $check_codes = array(‘1’, ‘0’, ‘X’, ‘9’, ‘8’, ‘7’, ‘6’, ‘5’, ‘4’, ‘3’, ‘2’);
    $sum = 0;
    for ($i = 0; $i < 17; $i++) { $sum += (int)$id_card_17[$i] * $weighted_factors[$i]; } $remainder = $sum % 11; $check_code = $check_codes[$remainder]; } // 验证校验码是否正确 if (strlen($id_card) == 15 || $id_card[17] != $check_code) { return false; } return true;}```5. 封装验证身份证号码的函数将以上的验证步骤封装为一个单独的函数,方便调用和使用。以下是一个封装验证身份证号码的函数的示例代码:```phpfunction validateIDCard($id_card){ // 验证身份证号码长度和格式 if (strlen($id_card) != 15 && strlen($id_card) != 18) { return false; } $pattern = "/^\d{17}[\dXx]|\d{15}$/"; if (!preg_match($pattern, $id_card)) { return false; } // 验证身份证号码中的地区码 $area_code = substr($id_card, 0, 6); $valid_area_codes = array('110000', '120000', '130000', ...); if (!in_array($area_code, $valid_area_codes)) { return false; } // 验证身份证号码中的生日信息 if (strlen($id_card) == 15) { $year = '19'.substr($id_card, 6, 2); $month = substr($id_card, 8, 2); $day = substr($id_card, 10, 2); } else { $year = substr($id_card, 6, 4); $month = substr($id_card, 10, 2); $day = substr($id_card, 12, 2); } if ($year < 1900 || $year > date(‘Y’)) {
    return false;
    }
    if ($month < 1 || $month > 12) {
    return false;
    }
    if (!checkdate($month, $day, $year)) {
    return false;
    }

    // 验证身份证号码中的校验码
    if (strlen($id_card) == 18) {
    $id_card_17 = substr($id_card, 0, 17);
    $weighted_factors = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
    $check_codes = array(‘1’, ‘0’, ‘X’, ‘9’, ‘8’, ‘7’, ‘6’, ‘5’, ‘4’, ‘3’, ‘2’);
    $sum = 0;
    for ($i = 0; $i < 17; $i++) { $sum += (int)$id_card_17[$i] * $weighted_factors[$i]; } $remainder = $sum % 11; $check_code = $check_codes[$remainder]; if ($id_card[17] != $check_code) { return false; } } return true;}```以上是使用PHP语言进行身份证有效性判断的方法和操作流程。通过验证身份证号码的长度、格式、地区码、生日信息和校验码,可以判断身份证是否有效。

    2年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部