中国(大陆)公民身份证类 | 工具类篇

github/alicfeng/IdentityCard

方法

  • 获取周岁
  • 获取生日
  • 获取性别
  • 获取生肖
  • 获取星座
  • 根据出生年月日获取年龄
  • 根据出生年月日获取星座
  • 构建生成身份证图片正反面( 支持自定义身份证背景图 )
  • 根据身份证获取省、市、区

安装

在项目composer.json添加依赖,如下:

"require": {
        "alicfeng/identity-card": "~3.0"
}

或者直接通过CLI安装,如下:

composer require "alicfeng/identity-card" -vvv

版本更新说明

  • V1.0
    在版本 1.0 中,证件号码错误都是返回false

  • V2.0
    在版本 2.0 中添加异常捕获机制,证件错误将返回异常,只有c::validate($id)方法返回bool值。

  • V2.3
    在版本 2.3 添加了一个新功能,可以提供身份证信息生成身份证图片。

    注意:图片的大小为:865 * 540 px

  • V3.0 2019.06.25
    在版本 3.0 添加了根据省份正号码获取省、市、区行政地区中文名称。
    行政地区编码源于中华人民共和国民政部,更新于 2019-06-21

  • V3.1.0 - 2020.02.23
    行政地区编码源于中华人民共和国民政部,更新于 2020-02-19。
    同时更新了内部实现的机制,调用的方法已经改变了,但是兼容低版本,建议更新旧的调用方法,将于2020.08.01不再支持旧的sdk


使用

use AlicFeng\IdentityCard\InfoHelper;

$id = 'IdentityCard';

# 获取周岁 | 
$age = InfoHelper::identityCard()->age($id);

# 获取生日
$birthday = InfoHelper::identityCard()->birthday($id);

# 获取性别 | {男为M | 女为F}
$sex = InfoHelper::identityCard()->sex($id);

# 获取生肖
$constellation = InfoHelper::identityCard()->constellation($id);

# 获取星座
$star = InfoHelper::identityCard()->star($id);

# 获取星座
$star = InfoHelper::birthday()->star($birthday);

# 获取年龄
$age = InfoHelper::birthday()->age($id);

# 生成身份证正面
$front = InfoHelper::identityCard()->createFrontImage(...);

# 生成身份证反面
$back = InfoHelper::identityCard()->createBackImage(...);

# 获取省
$province = InfoHelper::identityCard()->province($id, $default='');

# 获取市
$city = InfoHelper::identityCard()->city($id, $default='');

# 获取区
$area = InfoHelper::identityCard()->area($id, $default='');
本作品采用《CC 协议》,转载必须注明作者和本文链接
价值源于技术,贡献源于分享 | 笔记分享归档 No matter where I am, I will reply you immediately when I see the email. My Email: echo "YUBzYW1lZ28uY29tCg==" | base64 -d 个人比较喜欢分享,若有不对的地方非常感谢指出 相互学习、共同进步~
本帖由系统于 5年前 自动加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 28
wanghan

谢谢,不用造轮子了~

5年前 评论
wanghan

@AlicFeng 看了看源码,真是下功夫写的,大写的赞!

5年前 评论

@wanghan :smile: :smile:thx for your praise~

5年前 评论

建议 return false 改成 throw new Exception

5年前 评论

good!

5年前 评论

@Outlaws 非常感谢!已经在x2.0版本上添加了证件异常捕获机制~

5年前 评论

先收藏码住 万一用的到呢

5年前 评论
houmuxu

@AlicFeng 你好,这个包对性别的判断好像有点问题,比如411524199409081480这个是女,用sex函数打印出来是M

5年前 评论

@houmuxu 非常抱歉!这是计算性别的时候出现了bug,程序已经修复了,请通过更新或者重新安装这个包来解决这个问题。

5年前 评论

610125199409255533

试试这个身份证号码,验证不过去

4年前 评论

@大毛 没有问题呀~是报了什么异常吗

var_dump(IdentityCard::validate('610125199409255533')); // true
4年前 评论

@AlicFeng :sweat_smile:非常抱歉,看错位置了,应该提交到https://github.com/godruoyi/laravel-idcard-validator 这个库的,看的太多,眼花了,抱歉。。。 :pray:

4年前 评论
LOST
if (($month == 1 && $day <= 20) && ($month == 2 && $day <= 18)) {
            return '水瓶座';
} 

这里是不是有点问题?

4年前 评论

@AlicFeng @LOST 星座的临界值有点问题 :joy:

4年前 评论
AlicFeng (楼主) 4年前

可以根据身份证号码获取 用户真实姓名吗?

4年前 评论

@gyp719 本来之前是想做这个的,但是没有找到可以通过证件号查询真实姓名的接口,目前这个实现不了。

4年前 评论

@gyp719 这个是二要素校验( 身份证 以及 名字 ) ,就是校验身份证和名字是否匹配,像这种的有很多,你提的这个,我记得还有极认证、newapi等都是。

4年前 评论

请问图片怎么生成不了呢

4年前 评论

@juju

        $frontImage = IdentityCard::createFrontImage('冯大叔', '男', '汉', 1560089097, '广东省阳江市海陵镇试验区某某村委会某某村888号', '441701199506028888');
        imagepng($frontImage, 'front.png');
        imagedestroy($frontImage);

        $backImage = IdentityCard::createBackImage('2016.06.02', '2026.12.08');
        imagepng($backImage, 'back.png');
        imagedestroy($backImage);

正面

反面

4年前 评论

为什么我没找到 privince 、city、area这三个方法呢?

file

4年前 评论
AlicFeng (楼主) 4年前
AlicFeng (楼主) 4年前

能否加一个根据出生日期获取生肖

4年前 评论

@gyp719 可以的,明天可以迭代上这个

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!