PHP中一些常用证件的验证方法
时间:2022-07-23
本文章向大家介绍PHP中一些常用证件的验证方法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
<?php
/**
* 来往港澳通行证:
* 1.W,C+8位数字
* 2.7位数字
*/
function gapassport_verify($content)
{
$pattern = "/^d{7}$|^[W|C]d{8}$/";
if (!preg_match($pattern, $content)) {
return false;
}
return true;
}
/**
* 身份证校验代码
*/
function idCardVerify($id_card)
{
if (strlen($id_card) == 18) {
return idcard_checksum18($id_card);
} elseif ((strlen($id_card) == 15)) {
$id_card = idcard_15to18($id_card);
return idcard_checksum18($id_card);
} else {
return false;
}
}
// 计算身份证校验码,根据国家标准GB 11643-1999
function idcard_verify_number($idcard_base)
{
if (strlen($idcard_base) != 17) {
return false;
}
// 加权因子
$factor = array(
7,
9,
10,
5,
8,
4,
2,
1,
6,
3,
7,
9,
10,
5,
8,
4,
2
);
// 校验码对应值
$verify_number_list = array(
'1',
'0',
'X',
'9',
'8',
'7',
'6',
'5',
'4',
'3',
'2'
);
$checksum = 0;
for ($i = 0; $i < strlen($idcard_base); $i++) {
$checksum += substr($idcard_base, $i, 1) * $factor[$i];
}
$mod = $checksum % 11;
$verify_number = $verify_number_list[$mod];
return $verify_number;
}
// 将15位身份证升级到18位
function idcard_15to18($idcard)
{
if (strlen($idcard) != 15) {
return false;
} else {
// 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
if (array_search(substr($idcard, 12, 3), array(
'996',
'997',
'998',
'999'
)) !== false
) {
$idcard = substr($idcard, 0, 6) . '18' . substr($idcard, 6, 9);
} else {
$idcard = substr($idcard, 0, 6) . '19' . substr($idcard, 6, 9);
}
}
$idcard = $idcard . idcard_verify_number($idcard);
return $idcard;
}
/**
* 18位身份证校验码有效性检查
*/
function idcard_checksum18($idcard)
{
if (strlen($idcard) != 18) {
return false;
}
$aCity = array(11 => "北京", 12 => "天津", 13 => "河北", 14 => "山西", 15 => "内蒙古",
21 => "辽宁", 22 => "吉林", 23 => "黑龙江",
31 => "上海", 32 => "江苏", 33 => "浙江", 34 => "安徽", 35 => "福建", 36 => "江西", 37 => "山东",
41 => "河南", 42 => "湖北", 43 => "湖南", 44 => "广东", 45 => "广西", 46 => "海南",
50 => "重庆", 51 => "四川", 52 => "贵州", 53 => "云南", 54 => "西藏",
61 => "陕西", 62 => "甘肃", 63 => "青海", 64 => "宁夏", 65 => "新疆",
71 => "中国台湾", 81 => "中国香港", 82 => "中国澳门",
91 => "国外");
//非法地区
if (!array_key_exists(substr($idcard, 0, 2), $aCity)) {
return false;
}
//验证生日
if (!checkdate(substr($idcard, 10, 2), substr($idcard, 12, 2), substr($idcard, 6, 4))) {
return false;
}
$idcard_base = substr($idcard, 0, 17);
if (idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))) {
return false;
} else {
return true;
}
}
/**
* 国内护照
* 1.G|E+8位数字:如:G12345678
* 2.D|S|P+7位数字:如:D1234567
*/
function passportVerify($content)
{
$pattern = "/^[w]{5,17}$/";
return preg_match($pattern, $content);
}
/**
* 台胞证:
* 1、8位数字,如:12345678
* 2、10位数字+(1位英文字母),如:1234567890(T)
*/
function taibaoVerify($content)
{
$pattern_one = "/^[d]{8}$/";
$pattern_two = "/^[d]{10}[(|(][a-zA-z][)|)]$/iu";
return (preg_match($pattern_one, $content) || preg_match($pattern_two, $content));
}
/**
* 赴台证:
* 1.T+8位数字
* 2.25+7位数字
*/
function twpassport_verify($content)
{
$pattern = "/^25d{7}$|^Td{8}$/";
if (!preg_match($pattern, $content)) {
return false;
}
return true;
}
/**
* 军官证
* X字+8位,如:南字12345678
*/
function junguanVerify($content)
{
if (mb_strlen($content) != 10) {
return false;
}
$check = preg_match("/^[x{4e00}-x{9fa5}]{1}x{5b57}$/u", mb_substr($content, 0, 2));
if ($check && preg_match("/^d{8}$/u", mb_substr($content, 2, 8))) {
return true;
}
return false;
}
- android Universal Image Loader for Android 说明文档 (1)
- 修改android最小堆内存
- (转)ES6新特性概览
- 基于OEA框架的客户化设计(一) 总体设计
- 【致敬周杰伦】基于TensorFlow让机器生成周董的歌词(附源码)
- 关于Android N的那些事
- “节流函数”提高性能
- Mono 3.0.2 基于双工通信的WCF应用 Demo
- android的适配方法
- 使用Glimpse 监测ASP.NET MVC网站
- IPv6 socket编程下--实现篇
- android内存优化
- asp.net mvc本地程序集和GAC的程序集冲突解决方法
- ES6-arrows
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- Linux下Nginx安装的方法(pcre和openssl)
- Apache设置反向代理的方法
- CentOS7设置定时任务
- linux上安装zookeeper 启动和关闭的教程
- linux中rz上传、sz下载命令详解
- Linux alias命令编写
- 详解linux系统调用原理
- Linux下安装pyenv的方法
- 详解Linux如何生成随机数字和字符串
- linux(ubuntu)用户连续N次输入错误密码进行登陆时自动锁定X分钟
- linux下安装golang的方法
- Linux系统的文件传输方法
- CentOS 6.8 NFS 文件共享设置的方法
- linux如何mount挂载磁盘并设置开机自动mount的实现
- 浅谈Linux的编码及编码转换方法