「新轮子」一个基础身份证信息提取和验证组件,采集用户实名制信息更简单

分享 medz ⋅ 于 2个月前 ⋅ 最后回复由 linzi 6天前 ⋅ 1733 阅读

file

首先,原谅我是标题单,因为我说了「采集用户实名制信息更简单」!真实的事情是不简单!!!

Identity Card Of China (PHP)

中华人民共和国身份证(The identity card of the people's Republic of China)

Build Status

JavaScript 版本:https://github.com/medz/id-card-of-china-js (如果打不开,表示还没开发,但是 js 版本一天就能提供出来)

id-card-of-china 是一个基于「身份证号码」规则获取身份证号码中包含的基础信息组件。

安装

  • 你的 PHP 版本应该 >= 7.0

我们使用 Composer 安装:

composer require medz/id-card-of-china

使用

遵循 PHP-MD 原则,这个工具不提供静态调用,所以使用需要进行对象实例化:

use Medz\IdentityCard\China\Identity;

$peopleIDNumber = '350301198906180060';
$peopleIdentity = new Identity($peopleIDNumber);

APIs

基于 Medz\IdentityCard\China\IdentityInterface 实例

  • legal:检查身份证号码是否合法
  • birthday:获取身份证号码中包含的生日信息
  • gender:获取身份证包含的性别信息
  • region: 获取身份证包含的地区信息,返回 Medz\IdentityCard\China\Region\RegionInterface 实例

region 对象 APIs

  • code: 获取 GB/T 2260 的地区行政代码
  • province:获取省份名称或者直辖市名称
  • city:获取城市名称,如果是直辖市则返回 ''
  • county:获取区县名称
  • tree:获取地区层级数组
  • treeString:获取地区完整字符串,支持传递一个参数作为省市区的分隔符

演示

use Medz\IdentityCard\China\Identity;

$peopleIDNumber = '350302198906180060';
$peopleIdentity = new Identity($peopleIDNumber);
$peopleRegion = $peopleIdentity->region();

var_dump(
    $peopleIdentity->legal(),    // true | false
    $peopleIdentity->birthday(), // 1989-06-18
    $peopleIdentity->gender(),   // 女 | 男
    $peopleRegion->code(),       // 350302
    $peopleRegion->province(),   // 福建省
    $peopleRegion->city(),       // 莆田市
    $peopleRegion->county(),     // 城厢区
    $peopleRegion->tree(),       // ["福建省", "莆田市", "城厢区"]
    $peopleRegion->treeString(' ') // 福建省 莆田市 城厢区
);

疑问解答

  1. 问:为什么不添加年龄、星座还有属相等信息?

    答:因为年龄需要专门的时间组件去计算,星座如果是「粗略」计算可以获得,但是没有意义,属相更加负责,负责任的转换这些属性都比简单复杂,简单转换出来的不够准确。同样也失去了包本身该有的功能,例如年龄可以交给「时间组件」等。

  2. 问:这个包到底干啥的?

    答:这个包就是提取身份证号码所包含的基础信息

  3. 问:可以用来验证人或者其他的吗?

    答:不基于公安部的 API 验证的身份证组件都不能叫验证组件,现在所有的 ID Card 组件都只能提取身份证号码所包含的信息,如果说验证,那唯一能验证的就是身份证号码是否是一个合法的身份证号码。

LICENSE

This package follows the MIT open source agreement.

其他

好了,划重点!!! GitHub 仓库地址:https://github.com/medz/id-card-of-china

? 喜欢的话不妨 点个 Star 吧?

本文章首发在 Laravel China 社区

Seven 的代码太渣,欢迎关注我的新拓展包 medz/cors 解决 PHP 项目程序设置跨域需求。

本帖已被设为精华帖!
本帖由系统于 2个月前 自动加精
回复数量: 11
  • medz CTO @ 智艺创想

    原谅我,写完 readme 来写的文章,我发现直接发 readme 内容和文章差不多,同样意思的东西,写两个形式好累哟?!!!

    2个月前
  • medz CTO @ 智艺创想

    刚有群友问我,那如何获取年龄呢?好吧!我在这个帖子下面统一回复,我们以 nesbot/carbon 这个「时间组件」来计算年龄吧!

    composer require nesbot/carbon

    php 代码:

    use Carbon\Carbon;
    
    $birthday = new Carbon($identity->birthday());
    $age = $birthday->diffInYears();

    好了,你打印下 $age 试试看吧!!!

    2个月前
  • @medz Carbon有个直接获取age的属性,$bitfhday->age就可以,不需要执行diffInYears的转换。

    2个月前 3
  • medz CTO @ 智艺创想

    @Epona 是的呢~我看了代码,其实也是调用的 diffInYears 函数

    2个月前 1
  • medz CTO @ 智艺创想

    https://www.npmjs.com/package/id-card-of-china js 版本发布,src 采用 TypeScript 编写

    2个月前 1
  • 代码很规范。

    2个月前
  • 硬广一下,这个轮子我早在几年前就已写过,不过没有发过到论坛,最近看到一大堆重复轮子,当然百家争鸣也好,我的数据源基本上一年一更新。https://github.com/douyasi/identity-card 也提供 typescript/javascript/node 版:https://github.com/ycrao/id.js

    1个月前 3
  • 乍一看,还以为输入身份号可以查看所有信息呢,白激动了一把 :joy:
    支持一下 :+1:

    1个月前 1
  • medz CTO @ 智艺创想

    @Jinrenjie 哈哈~没有公安部的都不能提取所有信息

    1个月前
  • 巧了,我也是莆田的

    1个月前
  • 位数带X的身份证 识别不了

    1周前
您需要登陆以后才能留下评论!

Composer 中国全量镜像

Top 250 扩展包

Lumen 中文文档

Laravel 速查表

Laravel 中文文档

Laravel 项目开发规范

Laravel 开发环境部署

Composer 中文文档

Elasticsearch-PHP 中文文档

Lumen 中文文档

GraphQL PHP 中文文档

社区文档撰写指南

TDD 构建 Laravel 论坛笔记

PHP PSR 标准规范

PHP 设计模式全集

Dingo API 中文文档