当前位置: 首页 > news >正文

【PHP】身份证正则验证、校验位验证

目录

1.正则

简单正则

详细正则

2.校验位验证


1.正则


  • 简单正则
function isValidIdCardNumber($idCardNumber) {// 身份证号长度为 15 位或 18 位$pattern = '/^(?:\d{15}|\d{17}[\dxX])$/';return preg_match($pattern, $idCardNumber);
}$idCardNumber = '123456789012345678'; // 示例身份证号if (isValidIdCardNumber($idCardNumber)) {echo '身份证号有效';
} else {echo '身份证号无效';
}

这个正则表达式会匹配 15 位数字的身份证号(例如:123456789012345)或 18 位数字加一个校验位(例如:123456789012345678X123456789012345678x)的身份证号。请注意,这个正则表达式并不会验证校验位是否正确,只会检查身份证号的长度和格式。

  • 详细正则
$idcard = '123456789012345678';
$idcard = strtoupper($idcard); // 转成大写
$reg = '/^[1-9]\d{5}(19|20|21)\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/';
if (!preg_match($reg, $idcard)) {return false;
}
return true;

这个正则表达式用于验证中国大陆的身份证号。它的结构如下:

  1. /^:表示正则表达式的开始。
  2. [1-9]:第一位必须是 1-9 之间的数字。
  3. \d{5}:接下来的 5 位是任意数字。
  4. (19|20|21):接下来的 2 位可以是 "19"、"20" 或 "21" 之间的数字。
  5. \d{2}:接下来的 2 位是任意数字。
  6. ((0[1-9])|(10|11|12)):接下来的 2 位表示月份,可以是 "01" 到 "09" 或 "10" 到 "12" 之间的数字。
  7. (([0-2][1-9])|10|20|30|31):接下来的 2 位表示日期,可以是 "01" 到 "29" 之间的数字,或者 "30" 到 "31" 之间的数字(根据月份和闰年的不同而变化)。
  8. \d{3}:接下来的 3 位是任意数字。
  9. [0-9Xx]:最后一位可以是数字 0-9 或字母 X(大小写均可)。
  10. $:表示正则表达式的结束。

这个正则表达式用于验证身份证号的格式是否正确。然而,它并不会验证校验位是否正确。

2.校验位验证


 以下是一个使用 PHP 验证中国大陆身份证号校验位是否正确的示例:

function isValidIdCardNumber($idCardNumber) {// 身份证号长度为 15 位或 18 位$pattern = '/^(?:\d{15}|\d{17}[\dxX])$/';if (!preg_match($pattern, $idCardNumber)) {return false;}// 15 位身份证号转换为 18 位if (strlen($idCardNumber) === 15) {$idCardNumber = substr($idCardNumber, 0, 6) . '19' . substr($idCardNumber, 6, 9);}// 计算校验位$weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];$checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];$sum = 0;for ($i = 0; $i < 17; $i++) {$sum += $weights[$i] * (int) $idCardNumber[$i];}$checkCodeIndex = $sum % 11;// 验证校验位$lastChar = strtoupper($idCardNumber[17]);return $lastChar === $checkCodes[$checkCodeIndex];
}$idCardNumber = '123456789012345678'; // 示例身份证号if (isValidIdCardNumber($idCardNumber)) {echo '身份证号有效';
} else {echo '身份证号无效';
}

这个示例首先使用正则表达式验证身份证号的格式。如果身份证号格式正确,它会继续计算校验位。如果校验位与身份证号中的最后一位字符相符,那么身份证号被认为是有效的。

相关文章:

【PHP】身份证正则验证、校验位验证

目录 1.正则 简单正则 详细正则 2.校验位验证 1.正则 简单正则 function isValidIdCardNumber($idCardNumber) {// 身份证号长度为 15 位或 18 位$pattern /^(?:\d{15}|\d{17}[\dxX])$/;return preg_match($pattern, $idCardNumber); }$idCardNumber 12345678901234567…...

Matlab示例-Examine 16-QAM Using MATLAB学习笔记

​工作之余学习16-QAM 写在前面 网上看到许多示例&#xff0c;但一般都比较难以跑通。所以&#xff0c;还是老方法&#xff0c;先将matlab自带的例子研究下。 Examine 16-QAM Using MATLAB Examine 16-QAM Using MATLAB 或者&#xff0c;在matlab中&#xff0c;键入&#x…...

ArcGIS Pro SDK运行消息只提示一次

工具大部分都是异步执行&#xff0c;所以提示信息需要异步执行完再进行,所以注意async和await的使用。 相关async和await的文章请查看C# 彻底搞懂async/await_c# async await-CSDN博客 public async Task InformationPrompt() {string message String.Empty;await ArcGIS.De…...

通话状态监听-Android13

通话状态监听-Android13 1、Android Telephony 模块结构2、监听和广播获取通话状态2.1 注册2.2 通话状态通知2.3 通话状态 3、通知状态流程* 关键日志 frameworks/base/core/java/android/telephony/PhoneStateListener.java 1、Android Telephony 模块结构 Android Telephony…...

无懈可击的防泄密之旅:迅软DSE在民营银行的成功实践

客户简要介绍 某股份有限公司主体是中部地区的民营银行&#xff0c;由其母公司联合9家知名民营企业共同发起设立。正式开业于2016年&#xff0c;紧紧围绕目标产业生态圈和消费金融&#xff0c;着力打造产业银行、便捷银行、数字银行、财富管理银行为一体的BEST银行&#xff0c…...

【送书活动】智能汽车、自动驾驶、车联网的发展趋势和关键技术

文章目录 前言01 《智能汽车》推荐语 02 《SoC底层软件低功耗系统设计与实现》推荐语 03 《SoC设计指南》推荐语 05 《智能汽车网络安全权威指南&#xff08;上册&#xff09;》推荐语 06 《智能汽车网络安全权威指南&#xff08;下册&#xff09;》推荐语 后记赠书活动 前言 …...

不同版本QT使用qmake时创建QML项目的区别

不同版本QT使用qmake时创建QML项目的区别 文章目录 不同版本QT使用qmake时创建QML项目的区别一、QT5新建QML项目1.1 目录结构1.2 .pro 文件内容1.3 main.cpp1.4 main.qml 二、QT6新建QML项目2.1 目录结构2.2 .pro文件内容2.3 main.cpp2.4 main.qml 三、两个版本使用资源文件的区…...

【PHP入门】1.1-PHP初步语法

-PHP语法初步- PHP是一种运行在服务器端的脚本语言&#xff0c;可以嵌入到HTML中。 1.1.1PHP代码标记 在PHP历史发展中&#xff0c;可以使用多种标记来区分PHP脚本 ASP标记&#xff1a; <% php代码 %>短标记&#xff1a; <? Php代码 ?>&#xff0c;以上两种…...

如何在jenkins容器中安装python+httprunner+pytest+git+allure(一)

背景&#xff1a; API接口自动化使用python语言实现&#xff0c;利用httprunner框架编写自动化用例场景&#xff08;执行的时候还是依赖pytest),使用jenkins自动构建git上的源代码&#xff0c;并产生allure报告可视化展示API执行结果。 步骤 1.进入jenkins容器 注意使用roo…...

Android终端模拟器Termux上使用Ubuntu

Termux 上安装各种 Linux 系统是通过 proot-distro 工具来实现的&#xff0c;所以先安装一下 proot-distro 工具。 ~ $ pkg install proot-distro 查看Termux支持安装那些Linux ~ $ proot-distro listSupported distributions:* Alpine LinuxAlias: alpineInstalled: noComme…...

【神器】wakatime代码时间追踪工具

文章目录 wakatime简介支持的IDE安装步骤API文档插件费用写在最后 wakatime简介 wakatime就是一个IDE插件&#xff0c;一个代码时间追踪工具。可自动获取码编码时长和度量指标&#xff0c;以产生很多的coding图形报表。这些指标图形可以为开发者统计coding信息&#xff0c;比如…...

UML统一建模语言

一、建模语言的背景&#xff1a; 通俗地阐述就是&#xff1a;客户一开始不知道要什么&#xff0c;开发通过客户的阐述进行理解和分析&#xff0c;这个过程中间可能会产生一些误解。为了避免此类事件&#xff0c;所以需要建模。类似于要建造一栋楼&#xff0c;建筑设计师根据住…...

Linux命令行控制小米电源开关

飞灵科技产品 flyelf-tech.com&#xff0c;flyelf.taobao.com 最近有需求通过命令控制局域网内小米电源开关&#xff0c;以便于写脚本对产品进行反复上电的启动测试。参考了这篇文章&#xff1a;https://blog.csdn.net/2301_77209380/article/details/129797846 获取小米设备的…...

docker nginx 部署静态网站

1、dockerfile FROM nginx AS baseWORKDIR /appEXPOSE 80COPY . /app2、dockercompose.yaml version: 3 services:adminservice:container_name: adminwebbuild:context: ./dockerfile: Dockerfileports:- "5000:80"labels:description: adminwebrestart: always3、…...

uniapp之屏幕右侧出现滚动条去掉、隐藏、删除【好用!】

目录 问题解决大佬地址最后 问题 解决 在最外层view上加上class“content”;输入以下样式。注意&#xff1a;两个都必须存在在生效。 .content {/* 跟屏幕高度一样高,不管view中有没有内容,都撑开屏幕高的高度 */height: 100vh; overflow: auto; } .content::-webkit-scrollb…...

Linux 系统开机启动流程

可能没有完全理解&#xff0c;后期整理完Linux的内容&#xff0c;应该理解会深入一些&#xff0c;试着用更简洁的方式和图形来记录&#xff0c;以及一些概念的完善 2023-12-14 一、开机流程 BIOS MBR/GPT 加载 BIOS 的硬件信息与进行自检&#xff0c;并依据设定取得第一个可…...

vue2源码解析---watch和computed

监听属性watch 监听属性介绍 我们可以使用 watch 函数在每次响应式状态发生变化时触发回调函数wach 可以用于异步任务 监听属性的初始化 watch和computed都先走initSate判断传入选项 export function initState(vm) {const opts vm.$options; // 获取所有的选项if (opts.…...

【云原生】华为云踩坑日志(更新于2023.12.10)

1、华为云建议我们把sfs容量型升级到turbo版本&#xff0c;但是CCE产品storageclass sfs-turbo共享存储卷不支持动态绑定&#xff0c;官网文档可以实现动态创建子目录&#xff0c;建议大家直接选择这个&#xff0c;不要踩坑了 2、CCE 涉及到的产品&#xff0c;有的需要查看产品…...

计算机网络:自顶向下第八版学习指南笔记和课后实验--网络层(控制平面)

网络层&#xff1a;控制平面 记录一些学习计算机网络:自顶向下的学习笔记和心得 Github地址&#xff0c;欢迎star ⭐️⭐️⭐️⭐️⭐️ 控制平面作为一种网络范围的逻辑&#xff0c;不仅控制沿着从源主机到目的主机的端到端路径间的路由器如何转发数据报&#xff0c;而且控制…...

MFC 窗口创建过程与消息处理

目录 钩子简介 代码编写 窗口创建过程分析 消息处理 钩子简介 介绍几个钩子函数&#xff0c;因为它们与窗口创建工程有关 安装钩子函数 HHOOK SetWindowsHookExA([in] int idHook,[in] HOOKPROC lpfn,[in] HINSTANCE hmod,[in] DWORD dwThreadId ); 参数说明…...

新手福音:通过快马平台零代码基础理解qun329群聊应用开发

作为一个刚接触编程的新手&#xff0c;想要理解群聊应用开发确实容易一头雾水。最近我在尝试用InsCode(快马)平台搭建类似qun329的简单群聊网页时&#xff0c;发现整个过程比想象中简单很多。下面分享我的学习过程&#xff0c;希望能帮到同样零基础的朋友。 项目结构规划 首先明…...

别再死记硬背MVC了!通过Unity连连看实战,我搞懂了数据与UI分离的5个真实好处

从连连看实战看数据与UI分离的五大工程化收益 在游戏开发领域&#xff0c;设计模式常常被视为"高级概念"而被初学者敬而远之。但当我真正在Unity中实现一个简单的连连看游戏时&#xff0c;才深刻体会到MVC模式中数据与UI分离带来的实际价值。这不是教科书上的理论说教…...

JSW-8016GM4 加固交换机

■ 三层交换机&#xff0c;功能强大 ■ 支持16个10/100/1000M 以太网接口 ■ 支持4个10G光纤接口 ■ 支持IEEE802相关协议 ■ 2U高度&#xff0c;可在方舱上架安装 ■ 满足电磁兼容要求 ■ 整机加固设计&#xff0c;满足国军标相关要求主要参数产品类型&#xff1a;千兆以太网交…...

揭秘冷轧精密带钢DC03-C340:3大核心特性如何赋能精密制造?

朋友们&#xff0c;今天咱们不聊虚的&#xff0c;就聊聊工厂车间里最实在的东西——材料。你是不是也遇到过这样的烦心事&#xff1a;花大价钱买回来的钢带&#xff0c;一上冲床就开裂&#xff0c;废品率居高不下&#xff1b;或者热处理后表面出现诡异的蓝线&#xff0c;抛光怎…...

别再只用电容了!从π型RC到电子滤波,手把手教你选对硬件滤波方案(附电路图)

硬件滤波方案实战指南&#xff1a;从基础RC到电子滤波的工程决策 在嵌入式系统和电源设计中&#xff0c;噪声抑制是每个工程师必须面对的挑战。想象一下&#xff0c;你精心设计的传感器电路因为电源噪声导致数据跳变&#xff0c;或者音频放大器传出令人不快的嗡嗡声——这些问题…...

League-Toolkit:颠覆式英雄联盟客户端增强工具的全攻略

League-Toolkit&#xff1a;颠覆式英雄联盟客户端增强工具的全攻略 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit是一款基于官…...

Windows 11下Keil5 MDK与C51共存安装全攻略(附ST-Link驱动避坑指南)

Windows 11下Keil5 MDK与C51共存安装全攻略&#xff08;附ST-Link驱动避坑指南&#xff09; 在嵌入式开发领域&#xff0c;Keil作为经典开发工具链&#xff0c;其MDK&#xff08;Microcontroller Development Kit&#xff09;和C51版本分别服务于ARM架构和8051架构单片机开发。…...

嵌入式编程规范:提升代码质量与团队协作效率

1. 嵌入式编程规范的重要性作为一名在嵌入式领域摸爬滚打多年的工程师&#xff0c;我深刻体会到代码规范的重要性。记得刚入行时接手过一个老项目&#xff0c;里面混杂着五种不同的命名风格和三套缩进规则&#xff0c;光是理清代码逻辑就花了两周时间。从那以后&#xff0c;我就…...

手把手教你用llama.cpp在树莓派上跑大模型(附完整配置流程)

在树莓派上部署llama.cpp的完整实践指南 树莓派作为一款价格亲民且功能强大的微型计算机&#xff0c;近年来在边缘计算和嵌入式AI领域崭露头角。本文将详细介绍如何在树莓派上部署llama.cpp这一轻量级大语言模型推理框架&#xff0c;让开发者能够在资源受限的环境中体验前沿AI技…...

别再乱选ASCII/HEX了!野火串口调试助手发送接收区配置详解(附实战案例)

串口通信调试实战&#xff1a;ASCII与HEX模式的选择艺术 调试智能家居设备时&#xff0c;你是否遇到过发送"ON"指令毫无反应&#xff0c;接收区却显示一堆乱码的尴尬&#xff1f;这往往不是设备故障&#xff0c;而是串口调试中最常见的模式选择错误。作为嵌入式开发者…...