Delphi:校验手机号及身份证号
//校验手机号
function
IsMobileNumber( num:
string
):
boolean
;
begin
Result:=
False
;
if
length( trim( Num ) ) <>
11
then
Exit;
if
( ( copy( num,
1
,
2
) <>
'13'
)
and
( copy( num ,
1
,
2
) <>
'15'
) )
then
Exit;
try
StrToInt( copy( num,
3
,
9
) );
Result:=
True
;
except
end
;
end
;
//校验身份证,合法返回字符1,否则返回格式错误信息
function ValidatePID(const APID: string): string;
{内部函数,取身份证号校验位,最后一位,对18位有效}
function GetVerifyBit(sIdentityNum: string): Char;
var
nNum: Integer;
begin
Result := #0;
nNum := StrToInt(sIdentityNum[1]) * 7
StrToInt(sIdentityNum[2]) * 9
StrToInt(sIdentityNum[3]) * 10
StrToInt(sIdentityNum[4]) * 5
StrToInt(sIdentityNum[5]) * 8
StrToInt(sIdentityNum[6]) * 4
StrToInt(sIdentityNum[7]) * 2
StrToInt(sIdentityNum[8]) * 1
StrToInt(sIdentityNum[9]) * 6
StrToInt(sIdentityNum[10]) * 3
StrToInt(sIdentityNum[11]) * 7
StrToInt(sIdentityNum[12]) * 9
StrToInt(sIdentityNum[13]) * 10
StrToInt(sIdentityNum[14]) * 5
StrToInt(sIdentityNum[15]) * 8
StrToInt(sIdentityNum[16]) * 4
StrToInt(sIdentityNum[17]) * 2;
nNum := nNum mod 11;
case nNum of
0: Result := '1';
1: Result := '0';
2: Result := 'X';
3: Result := '9';
4: Result := '8';
5: Result := '7';
6: Result := '6';
7: Result := '5';
8: Result := '4';
9: Result := '3';
10: Result := '2';
end;
end;
var
L: Integer;
sCentury: string;
sYear2Bit, sYear4Bit: string;
sMonth: string;
sDate: string;
iCentury: Integer;
iMonth: Integer;
iDate: Integer;
CRCFact: string; //18位证号的实际值
CRCTh: string; //18位证号的理论值
FebDayAmt: Byte; //2月天数
begin
L := Length(APID);
if (L in [15, 18]) = False then
begin
Result := Format('身份证号不是15位或18位(%0:s, 实际位数:%1:d)', [APID, L]);
Exit;
end;
CRCFact := '';
if L = 18 then
begin
sCentury := Copy(APID, 7, 2);
iCentury := StrToInt(sCentury);
if (iCentury in [18..20]) = False then
begin
Result := Format('身份证号码无效:18位证号的年份前两位必须在18-20之间(%0:S)', [sCentury]);
Exit;
end;
sYear2Bit := Copy(APID, 9, 2);
sYear4Bit := sCentury sYear2Bit;
sMonth := Copy(APID, 11, 2);
sDate := Copy(APID, 13, 2);
CRCFact := Copy(APID, 18, 1);
end else
begin
sCentury := '19';
sYear2Bit := Copy(APID, 7, 2);
sYear4Bit := sCentury sYear2Bit;
sMonth := Copy(APID, 9, 2);
sDate := Copy(APID, 11, 2);
end;
iMonth := StrToInt(sMonth);
iDate := StrToInt(sDate);
if (iMonth in [01..12]) = False then
begin
Result := Format('身份证号码无效:月份必须在01-12之间(%0:s)', [sMonth]);
Exit;
end;
if (iMonth in [1, 3, 5, 7, 8, 10, 12]) then
begin
if (iDate in [01..31]) = False then
begin
Result := Format('身份证号码无效:日期无效,不能为零或超出当月最大值(%0:s)', [sDate]);
Exit;
end;
end;
if (iMonth in [4, 6, 9, 11]) then
begin
if (iDate in [01..30]) = False then
begin
Result := Format('身份证号码无效:日期无效,不能为零或超出当月最大值(%0:s)', [sDate]);
Exit;
end;
end;
if IsLeapYear(StrToInt(sCentury sYear2Bit)) = True then
begin
FebDayAmt := 29;
end else
begin
FebDayAmt := 28;
end;
if (iMonth in [2]) then
begin
if (iDate in [01..FebDayAmt]) = False then
begin
Result := Format('身份证号码无效:日期无效,不能为零或超出当月最大值(%0:s)', [sDate]);
Exit;
end;
end;
if CRCFact <> '' then
begin
CRCTh := GetVerifyBit(APID);
if CRCFact <> CRCTh then
begin
Result := Format('身份证号码无效:校验位(第18位)错:(%0:s)', [APID]);
Exit;
end;
end;
Result := '1';
end;
转载于:https://www.cnblogs.com/lrl45/p/5135462.html
Delphi:校验手机号及身份证号相关推荐
- JS校验手机号和身份证号格式
1:校验手机号 //JS正则表达式校验手机号function isPoneAvailable(poneInput) {var myreg=/^[1][3,4,5,7,8][0-9]{9}$/;if ( ...
- 利用正则来验证姓名、手机号、身份证号
开发工具与关键技术:Visual Studio 2015 正则 作者:孙水兵 撰写时间:2019年6月27 一. 效果 二. 用到的方法 test:test 方法检查字符串是否与给出的正则表达式模式相 ...
- 关于实现手机号,身份证号加密解密解决方案
关于实现手机号,身份证号加密解密解决方案 要求: 1.不入侵任何业务逻辑 2.可以扩展解密解密字段 3.可以扩展加密解密算法 环境: jdk1.8.springMVC 解决方案: 基于自定义注解和my ...
- 正则表达式隐藏手机号、身份证号、台胞证、护照、回乡证中间几位数字信息
隐藏规则: demo: /** * @des 隐藏员工隐私信息(手机号.身份证号.台胞证.护照.回乡证) * @rule 手机号的中间4位隐去,身份证号隐去中间8位,台胞证隐去中间8位,护照隐去中间4 ...
- BankCardUtils(根据银行卡号 获取 银行卡类型、银行名称和银行编码 自动格式化银行卡号、手机号、身份证号输入的工具类)
BankCardUtils 根据银行卡号 获取 银行卡类型.银行名称和银行编码 自动格式化银行卡号.手机号.身份证号输入的工具类 效果图 特点 支持自动根据银行卡号获取出银行名称.银行编码.银行卡类型 ...
- MySQL 如何隐藏客户姓名、手机号或者身份证号中的部分信息
文章目录 隐藏姓名中的姓氏或者名字 隐藏手机号中间的四位数 隐藏身份证号中间的四位数 大家好,我是只谈技术不剪发的 Tony 老师.很多应用系统在前端显示个人信息时,为了保护信息安全需要将姓名.手机号 ...
- Microsoft SQL Server 如何隐藏客户姓名、手机号或者身份证号中的部分信息
文章目录 隐藏姓名中的姓氏或者名字 隐藏手机号中间的四位数 隐藏身份证号中间的四位数 总结 大家好,我是只谈技术不剪发的 Tony 老师.姓名.手机号.身份证号以及银行卡号等属于个人敏感信息.为了保护 ...
- PHP 正则表达式判断手机号和身份证号
在PHP编写的程序中,为了保证代码本身的流程安全,少不了对数据流进行一些效验的工作.而PHP给我提供了正则表达式验证函数,我们可以很方便的通过正则表达式的验证函数,来检查数据流是否符合标准.这个时候就 ...
- BankCardUtils 根据银行卡号 获取 银行卡类型、银行名称和银行编码 自动格式化银行卡号、手机号、身份证号输入的工具类
BankCardUtils 项目地址:nanchen2251/BankCardUtils 简介:根据银行卡号 获取 银行卡类型.银行名称和银行编码 自动格式化银行卡号.手机号.身份证号输入的工具类 ...
最新文章
- 关于bitnami redmine 的一些问题
- java内存溢出分析工具:jmap使用实战
- Go语言的三元表达式
- Android实现图片的高效批量加载
- input限制输入字符
- python中pip安装报错的一些总结
- 连版《三十六英雄》整理
- 全志平台Android系统wifi模组rtl8188eu移植调试记录
- BCDEDIT - 启动配置数据存储编辑器
- postfixcalc函数 java_结对编程--四则运算(Java)萧英杰 夏浚杰
- c语言实现求最大公约数的三种方法
- Python声音处理入门
- noip 2009 靶形数独
- Element Select选择器从服务器搜索数据,输入关键字进行查找(从服务器获得的数据有分页)
- DCM4CHE处理多帧图像
- K2 BPM_K2签约龙光地产,为集团实现“千亿目标”保驾护航_全球领先的工作流引擎...
- DeFi之道丨一文了解Uniswap v3 LP 自动化管理器
- 八点钟学院软件测试,急求普通话测试题,如果哪位同学有请转发好吗?
- java git打包iOS_懒人做iOS系列之jenkins+git+fir打包(xCode9)
- JFinal建立项目
热门文章
- 系统快捷方式java_java中这么创建界面快捷方式图标 代码
- Java教程:Java程序的运行过程(执行流程)分析
- python内存池_python内存监控工具memory_profiler和guppy的用法详解
- mvc html.radiobutton 选中,asp.net-mvc - 如何使用RadioButtonFor选择单选按钮中的任何一个并包含if else语句 - 堆栈内存溢出...
- java编写人机聊天_无聊 写了个人机对话的小程序 哈哈!
- 字符界面运行mysql_详解linux系列之字符界面下MySQL+apache+php的源代码安装
- 管理数据库计算机网络,计算机网络与数据库管理系统.pdf
- pathinfo函数获取非UTF-8字符集文件名的问题
- asp.net mysql helper_asp.net使用SQLHelper操作数据库
- spark 查看yarn日志_spark周边项目之Livy