身份证后四位是否唯一?

简介: 身份证后四位是否唯一?

众所周知,身份证是唯一的。

但是有一个人突然问到,我们数据库中的身份证后四位是唯一的吗?能否查询一下数据库?

这个问题,我的第一反应是,当然不唯一了。

非严谨解释

在不进行数据库验证的前提下,我们只是从逻辑上想一下,身份证一共18位,后四位,即生日后的四位数,那么即使再怎么排列,最多也就是 101010*11个组合,肯定是会重复的。

严谨解释

我们再从严谨的逻辑来理解一下

身份证的排列规则:
身份证号码是由18位数字组成
第1、2位数字表示:所在省份的代码
第3、4位数字表示:所在城市的代码
第5、6位数字表示:所在区县的代码
第7-14位数字表示:出生年、月、日(其中7、8、9、10位是年,11、12位是月,13、14位是日)
第15-17位都是同一地址辖区内的,以及同年同月同日出生人的顺序码,同时第17位兼具性别标识功能,男单女双
第18位数字是校检码:可以是0-9的数字,有时也用X表示

所以,在不同的省市区,身份证后四位是可以重复的。

数据库验证

是的,我们是程序员,当理论无法让人接受的时候,我们可以使用数据来说服他人。
这里我的数据库是mongo数据库,所以,我的查询语句如下

db.user.aggregate([
    {
        $match: {
            //请原谅数据库中那些不规范的身份证号
            card_id: {
                $exists: true,
                $nin: ["", null]
            }
        }
    },
    {
        $project: {
            "_id": 1,
            "name": 1,
            "card_id": 1,
            "card_id_info": {
                $substr: ["$card_id", 14, 4]
            }
        }
    },
    //请原谅数据库中那些不规范的身份证号
    {
        $match: {
            card_id_info: {
                $nin: ["", null]
            }
        }
    },
    {
        $group: {
            _id: "$card_id_info",
            count: {
                $sum: 1
            },
                        //增加输出
            uniqueIds: {
                "$addToSet": {
                    _id: "$_id",
                    name: "$name",
                    card_id: "$card_id",
                    card_id_info: "$card_id_info"
                }
            }
        }
    },
    {
        //让我们看看重复的多的是哪些
        $sort: {
            count:  - 1
        }
    }
])

寄语

数据无情但真实

目录
相关文章
|
Linux iOS开发 开发者
探索FFmpeg:实现自定义播放速度的全方位指南(一)
探索FFmpeg:实现自定义播放速度的全方位指南
1102 0
|
移动开发 前端开发 程序员
有哪些代码开源平台值得推荐?
开源是程序员最高的浪漫
|
10月前
|
API
历史上的今天免费API接口教程
该接口用于获取历史上的今天发生的事件,支持随机获取记录,数据同步自百度历史上的今天。请求方式为POST或GET,需提供用户ID和KEY,可选指定查询的具体日期。返回数据包括事件标题、年份、月份、日、关键词及百度百科链接。示例请求和响应详见文档。
442 12
|
8月前
|
存储 安全 数据安全/隐私保护
FileCodeBox:Star4.9k,类似百度网盘,小团队、小公司都用得上的文件共享与分享工具,支持设置分享密码,界面清爽简单易用
FileCodeBox是一款开源文件共享工具,类似百度网盘,适合小团队和公司使用。它支持设置分享密码,界面简洁易用,提供匿名文件和文本分享功能。用户可通过提取码轻松获取文件,支持多种上传方式、文件类型及设备访问。项目基于FastAPI + SQLite3 + Vue3构建,具备轻量、安全、多语言支持等特点
351 2
|
7月前
|
人工智能 自然语言处理 搜索推荐
高性价比| OpenSearch 智能问答版开箱即用 DeepSeek-R1
OpenSearch LLM智能问答版基于DeepSeek-R1一分钟搭建RAG系统。
1395 11
高性价比| OpenSearch 智能问答版开箱即用 DeepSeek-R1
|
SQL 监控 索引
如何在 SQL Server 中使用 `PATINDEX` 函数
【8月更文挑战第8天】
1011 9
|
7月前
|
存储 缓存 算法
JDK11升级后竟让内存利用率飙升到90%以上?
本文记录了作者升级到JDK11后,使用G1GC导致内存利用率飙升至90%以上的问题及其解决方案。
|
SQL 关系型数据库 MySQL
在 MySQL 中使用 `HAVING` 子句
【8月更文挑战第12天】
789 1
在 MySQL 中使用 `HAVING` 子句