原文地址:http://blog.csdn.net/ytfy12/article/details/11679625
功能需求:由于要对15000多参保职工进行身份证号的申报与检验,故需要做一个能够
对身份证号有效性进行检验的软件功能,能够进行如下处理:
1、检验身份证是否为空
2、检验身份证长度是否为15或18位
3、检验身份证的出生日期的有效性
4、检验身份证的格式的有效性
5、检验18位的身份号校验位的合法性,对15位加上校验位。
6、以函数形式编写,以便进行调用使用,并返回非法类型。
实现环境:PL/SQL 7.0
编译了三个函数:sfzhcheck() 以字符型身份证号为参数,返回“正确”及各类非法错误类型
isnumber() 以字符型身份证号为参数,验证是否为合法格式,返回真假值
isdate() 以格式为2008-08-26的字符型日期为参数,验证是否为合法日期
对年限制在了20世纪。
具体实现如下:
1、日期判断函数
create or replace isdate(rq in varchar2) return boolean is
Result boolean;
lyear integer;
lmonth integer;
lday integer;
begin
result:=true;
lyear:=to_number(substr(rq,1,4));
lmonth:=to_number(substr(rq,6,2));
lday:=to_number(substr(rq,9,2));
if lyear>2000 or lyear<1900 then
Result:=false;
end if;
if lmonth<1 or lmonth>12 then
Result:=false;
end if ;
if mod(lyear,4)=0 and lyear/100<>Floor(lyear/100) or mod(lyear,400)=0 then
if (lmonth=2 and (lday<1 or lday>29)) then
Result:=false;
end if;
else
if (lmonth=2 and (lday<1 or lday>28)) then
Result:=false;
end if;
end if;
if lmonth in (1,3,5,7,8,10,12) and (lday<1 or lday>31) then
Result:=false;
end if;
if lmonth in (4,6,9,11) and (lday<1 or lday>30) then
Result:=false;
end if;
return(Result);
end isdate;
2、数字格式判断函数
create or replace IsNumber(Name in varchar2) return boolean is
Result boolean;
sz varchar2(10);
pos integer;
zf varchar2(1);
cd integer;
begin
sz:='0123456789';
Result:=true;
pos:=1;
cd:=length(name);
zf:=substr(name,pos,1);
while pos <= cd loop
if instr(sz,zf,1)!=0 then
pos:=pos+1;
zf:=substr(name,pos,1);
else
Result:=false;
return(Result);
end if;
end loop;
return(Result);
end IsNumber;
3、身份证合法校验函数
create or replace sfzhcheck(sfzh in varchar2) return varchar2 is
Result varchar2(30);
err varchar2(30);
sfzh1 varchar2(20);
sfzh2 varchar2(20);
sfzh_len number(2,0);
rql varchar2(10);
nn varchar2(36);
ss varchar2(11);
ll_Sum integer;
i integer;
ls_V varchar2(2);
begin
nn:= '070910050804020106030709100508040201';
ss:= '10X98765432';
err:='正确';
sfzh1:=sfzh;
---检验身份证是否为空
if sfzh1 is null then
err:='身份证为空';
result:=err;
return(Result);
end if ;
--- 检验身份证长度是否满足
sfzh_len:=length(trim(nvl(sfzh1,'')));
if not (sfzh_len=15 or sfzh_len=18) then
err:='身份证长度错';
result:=err;
return(Result);
end if;
----检验身份证格式是否正确
if not (
(sfzh_len = 15 and IsNumber(sfzh1)) or
(sfzh_len = 18 And (IsNumber(sfzh1) or (IsNumber(substr(sfzh1,1, 17)) And Upper(substr(sfzh1,18, 1)) = 'X')))) Then
err:= '身份证格式错误';
result:=err;
return(Result);
End If ;
---检查身份证出生日期是否正确
if sfzh_len = 15 Then
rql:= '19' || substr(sfzh1, 7, 2) || '-' || substr(sfzh1, 9, 2) || '-' || substr(sfzh, 11, 2);
Else
rql :=substr(sfzh1, 7, 4) || '-' || substr(sfzh1, 11, 2) || '-' || substr(sfzh1, 13, 2);
End If;
对身份证号有效性进行检验的软件功能,能够进行如下处理:
1、检验身份证是否为空
2、检验身份证长度是否为15或18位
3、检验身份证的出生日期的有效性
4、检验身份证的格式的有效性
5、检验18位的身份号校验位的合法性,对15位加上校验位。
6、以函数形式编写,以便进行调用使用,并返回非法类型。
实现环境:PL/SQL 7.0
编译了三个函数:sfzhcheck() 以字符型身份证号为参数,返回“正确”及各类非法错误类型
isnumber() 以字符型身份证号为参数,验证是否为合法格式,返回真假值
isdate() 以格式为2008-08-26的字符型日期为参数,验证是否为合法日期
对年限制在了20世纪。
具体实现如下:
1、日期判断函数
create or replace isdate(rq in varchar2) return boolean is
Result boolean;
lyear integer;
lmonth integer;
lday integer;
begin
result:=true;
lyear:=to_number(substr(rq,1,4));
lmonth:=to_number(substr(rq,6,2));
lday:=to_number(substr(rq,9,2));
if lyear>2000 or lyear<1900 then
Result:=false;
end if;
if lmonth<1 or lmonth>12 then
Result:=false;
end if ;
if mod(lyear,4)=0 and lyear/100<>Floor(lyear/100) or mod(lyear,400)=0 then
if (lmonth=2 and (lday<1 or lday>29)) then
Result:=false;
end if;
else
if (lmonth=2 and (lday<1 or lday>28)) then
Result:=false;
end if;
end if;
if lmonth in (1,3,5,7,8,10,12) and (lday<1 or lday>31) then
Result:=false;
end if;
if lmonth in (4,6,9,11) and (lday<1 or lday>30) then
Result:=false;
end if;
return(Result);
end isdate;
2、数字格式判断函数
create or replace IsNumber(Name in varchar2) return boolean is
Result boolean;
sz varchar2(10);
pos integer;
zf varchar2(1);
cd integer;
begin
sz:='0123456789';
Result:=true;
pos:=1;
cd:=length(name);
zf:=substr(name,pos,1);
while pos <= cd loop
if instr(sz,zf,1)!=0 then
pos:=pos+1;
zf:=substr(name,pos,1);
else
Result:=false;
return(Result);
end if;
end loop;
return(Result);
end IsNumber;
3、身份证合法校验函数
create or replace sfzhcheck(sfzh in varchar2) return varchar2 is
Result varchar2(30);
err varchar2(30);
sfzh1 varchar2(20);
sfzh2 varchar2(20);
sfzh_len number(2,0);
rql varchar2(10);
nn varchar2(36);
ss varchar2(11);
ll_Sum integer;
i integer;
ls_V varchar2(2);
begin
nn:= '070910050804020106030709100508040201';
ss:= '10X98765432';
err:='正确';
sfzh1:=sfzh;
---检验身份证是否为空
if sfzh1 is null then
err:='身份证为空';
result:=err;
return(Result);
end if ;
--- 检验身份证长度是否满足
sfzh_len:=length(trim(nvl(sfzh1,'')));
if not (sfzh_len=15 or sfzh_len=18) then
err:='身份证长度错';
result:=err;
return(Result);
end if;
----检验身份证格式是否正确
if not (
(sfzh_len = 15 and IsNumber(sfzh1)) or
(sfzh_len = 18 And (IsNumber(sfzh1) or (IsNumber(substr(sfzh1,1, 17)) And Upper(substr(sfzh1,18, 1)) = 'X')))) Then
err:= '身份证格式错误';
result:=err;
return(Result);
End If ;
---检查身份证出生日期是否正确
if sfzh_len = 15 Then
rql:= '19' || substr(sfzh1, 7, 2) || '-' || substr(sfzh1, 9, 2) || '-' || substr(sfzh, 11, 2);
Else
rql :=substr(sfzh1, 7, 4) || '-' || substr(sfzh1, 11, 2) || '-' || substr(sfzh1, 13, 2);
End If;
if not isdate(rql) then
err:= '身份证出生日期错误';
result:=err;
return(Result);
end if;
----性别没做检查可扩充用
----检查身份证校验位是否正确
sfzh2:=sfzh1;
If sfzh_len = 15 Then
sfzh2 := substr(sfzh1,1, 6) ||+ '19' ||substr(sfzh1,7,9);
end if;
i:=1;
ll_sum:=0;
while i<=17 loop
ll_Sum :=ll_Sum+ to_number(substr(sfzh2, i, 1)) * to_number(substr(nn,(i-1)*2+1,2));
i:=i+1;
end loop;
ls_V := substr(ss,(Mod(ll_Sum, 11) + 1),1);
If sfzh_len = 18 Then
If upper(substr(sfzh1,18, 1)) <> upper(ls_V) Then
err:= '身份证校验位不正确';
result:=err;
return(Result);
End If;
Else
sfzh2:=sfzh2||ls_V;
End If;
result:=err;
return(Result);
end sfzhcheck;
err:= '身份证出生日期错误';
result:=err;
return(Result);
end if;
----性别没做检查可扩充用
----检查身份证校验位是否正确
sfzh2:=sfzh1;
If sfzh_len = 15 Then
sfzh2 := substr(sfzh1,1, 6) ||+ '19' ||substr(sfzh1,7,9);
end if;
i:=1;
ll_sum:=0;
while i<=17 loop
ll_Sum :=ll_Sum+ to_number(substr(sfzh2, i, 1)) * to_number(substr(nn,(i-1)*2+1,2));
i:=i+1;
end loop;
ls_V := substr(ss,(Mod(ll_Sum, 11) + 1),1);
If sfzh_len = 18 Then
If upper(substr(sfzh1,18, 1)) <> upper(ls_V) Then
err:= '身份证校验位不正确';
result:=err;
return(Result);
End If;
Else
sfzh2:=sfzh2||ls_V;
End If;
result:=err;
return(Result);
end sfzhcheck;
相关推荐
PLSQL(Procedural Language/SQL)是Oracle数据库系统中用于编写存储过程、函数、包等的编程语言,它提供了丰富的功能来处理和操作数据库中的数据。当需要将PLSQL查询结果导出为CSV(Comma Separated Values)格式时...
PLSQL Developer是一款强大的Oracle数据库开发工具,由Allround Automations公司开发。它为数据库管理员、开发者和测试人员提供了集成的环境,便于编写、调试、执行和管理PL/SQL代码。这款软件通常需要购买许可证...
PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL程序。在中文环境下,对于不熟悉英文界面的用户来说,使用英文版可能会带来不便。"plsql11汉化包"正是为了解决这个问题,...
PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 ...
PLSQL Developer是一款强大的Oracle数据库管理工具,主要针对PL/SQL语言进行开发、调试和管理。在32位操作系统环境下,用户可能需要下载适用于该系统的PLSQL Developer版本。本指南将详细介绍如何下载并安装32位...
8. **许可证**:使用PLSQL Developer时,要确认你拥有合法的许可证。个人使用可能有免费版本,而商业用途可能需要购买正式许可证。 9. **更新与维护**:保持软件更新至最新版本,可以确保兼容最新的Oracle数据库...
plsql11安装包文件
PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL代码。在许多情况下,用户可能需要PLSQL的免安装版本,这可能是出于便携性、节省系统资源或者避免系统冲突的考虑。标题...
plsql developer plsql developer plsql developer plsql developer plsql developer
PLSQL Developer是一款强大的Oracle数据库开发工具,专为PL/SQL编程语言设计,它提供了一整套集成环境,便于开发、调试、管理以及执行PL/SQL代码。标题中的"PLSQL_Developer8.0绿色版64位"指的是该版本是针对64位...
PLSQL,全称为“Procedural Language/Structured Query Language”,是Oracle公司为在其数据库系统中进行结构化编程而设计的一种编程语言。它扩展了SQL,允许开发者编写存储过程、函数、包、触发器等,提供了更强大...
PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。... 该安装包包含了解决PLSQL过期的文件,将PLSQL安装后将解决过期的文件放到安装包中,即可解决PLSQL过期的问题。即可永久使用。
**PlSql中的CnPlugin插件详解** PL/SQL Developer(简称PLSQL)是一款由Allround Automations公司开发的专业Oracle数据库管理与开发工具,它为数据库管理员和开发人员提供了强大的功能,包括编写、调试、执行SQL和...
PLSQL Developer是一款强大的Oracle数据库开发工具,由Allround Automations公司开发。在本文中,我们将深入探讨PLSQL Developer 12的汉化版及其与Oracle数据库的交互,以及如何使用注册Key激活软件。 PLSQL ...
5. **验证汉化**:确保所有菜单、对话框和提示信息都已正确翻译成中文,如果仍有部分未汉化,可能需要检查是否所有必要的文件都已经替换。 请注意,汉化包可能存在兼容性问题,不适用于所有系统环境,或者与某些...
不过,需要注意的是,这可能并不符合官方的许可协议,使用时应确保遵循软件的合法使用规定,尊重知识产权。 新版本的PLSQL Developer通常会包含性能提升、新功能的添加以及对旧版本中问题的修复。例如,可能提升了...
PLSQL Developer 14用户指南 PLSQL Developer 14用户指南是Oracle公司出品的一款专业database开发工具,旨在帮助用户快速掌握PL/SQL语言编程。该指南详细介绍了PL/SQL Developer 14的安装、配置、编程和调试等方面...
PLSQL程序优化和性能分析方法 PLSQL程序优化是指在编写PLSQL程序时,为了提高程序的执行效率和性能所采取的一系列措施和技术。这些措施和技术可以帮助开发者编写高效、可靠、可维护的PLSQL程序,从而提高系统的整体...
合法使用PLSQL Developer应通过官方网站购买授权。 在使用PLSQL Developer时,用户可以享受如下的主要功能: 1. **代码编辑**:它提供了语法高亮、自动完成、代码折叠和错误检查等功能,提高编码效率。 2. **调试*...
PLSQL Developer是一款强大的Oracle数据库开发工具,专为64位操作系统设计。这款工具以其直观的用户界面、高效的代码编辑器和全面的调试功能而受到广大数据库管理员和开发者的青睐。在"PLSQLDeveloper_解压版(64位...