`
WindyQin
  • 浏览: 32540 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

自己写的一个身份证号码判断的过程包,运行环境为plsql

 
阅读更多

create or replace package sp_id_card is

/********************************************************************
#function:身份证信息查询
#version:1.00
#author:qcf
#createdate:2015-5-26
#input: card_id VARCHAR2 身份证号码
#output:out_msg VARCHAR2 身份证信息
#modifyexplain:
********************************************************************/

function is_number(str varchar2) return integer; --判断输入的身份证是否为数字
function is_date(in_date varchar2) return integer; --判断输入的是否是身份证号码
function is_idcard(card_id varchar2) return integer; --判断输入的是否是身份证号码
function is_areacode(card_id varchar2) return integer; --判断前6位是否为地区号
function get_age(card_id in varchar2) return varchar2; --获取年龄
function get_sex(card_id varchar2) return varchar2; --获取性别
function get_area(card_id varchar2) return varchar2; --获取地区信息
function get_day(card_id varchar2) return varchar2; --获取出生日期
function get_card_info(card_id varchar2) return varchar2;--身份信息简介
procedure id_card_info(card_id varchar2, out_msg out varchar); --身份信息简介
end sp_id_card;
/
create or replace package body sp_id_card is

/********************************************************************
#function:身份证信息查询
#version:1.00
#author:qcf
#createdate:2015-5-26
#input: card_id VARCHAR2 身份证号码
#output:out_msg VARCHAR2 身份证信息
#modifyexplain:
********************************************************************/

--判断输入的身份证是否为数字

function is_number(str varchar2) return integer is
begin
if (length(trim(translate(str, '0123456789', ' '))) is null) then
return 1;
else
return 0;
end if;
end is_number;

function is_date(in_date varchar2) return integer is
val date;
begin
val := to_date(nvl(in_date, 'a'), 'yyyy-mm-dd hh24:mi:ss');
return 1;
exception
when others then
return 0;
end;

--判断输入的是否是身份证号码

function is_idcard(card_id varchar2) return integer is
idcardlen integer default 0;
begin
idcardlen := length(card_id);
if (idcardlen = 18 and is_number(card_id) = 1 and
is_date(substr(card_id, 7, 8)) = 1) and is_areacode(card_id) = 1 or
(idcardlen = 18 and
is_number(substr(card_id, 1, idcardlen - 1)) = 1 and
substr(card_id, -1, 1) = 'X' and
is_date(substr(card_id, 7, 8)) = 1) and is_areacode(card_id) = 1 then
return 1;
else
return 0;
end if;
end is_idcard;

--判断前6位是否为地区号

function is_areacode(card_id varchar2) return integer is

v_areacode varchar2(6);
begin
select a.area_no
into v_areacode
from idcard_area a
where a.area_no = substr(card_id, 1, 6);
return 1;
exception
when no_data_found then
return 0;
end is_areacode;

--获取年龄

function get_age(card_id in varchar2) return varchar2 is
agevalue varchar2(10);
begin
if is_idcard(card_id) = 0 then
return '身份证号码错误,请核查!';
end if;

if (length(trim(card_id)) = 18) then
select (to_char(sysdate, 'yyyy') -
to_char(substr(card_id, 7, 4)))
into agevalue
from dual;
else
if (length(trim(card_id)) = 15) then
select (to_char(sysdate, 'yyyy') -
to_char('19' || substr(card_id, 7, 2)))
into agevalue
from dual;
else
agevalue := '0';
end if;
end if;
return agevalue;
end get_age;

--获取性别

function get_sex(card_id varchar2) return varchar2 is
idcardlen integer;
begin
idcardlen := length(card_id);
if is_idcard(card_id) = 0 then
return '身份证号码错误,请核查!';
end if;

if idcardlen = 18 and substr(card_id, 17, 1) in (2, 4, 6, 8, 0) then
return('女');
end if;
if idcardlen = 18 and substr(card_id, 17, 1) in (1, 3, 5, 7, 9) then
return('男');
end if;
if idcardlen = 15 and substr(card_id, 15, 1) in (1, 3, 5, 7, 9) then
return('男');
end if;
if idcardlen = 15 and substr(card_id, 15, 1) in (2, 4, 6, 8, 0) then
return('女');
end if;
end get_sex;

--获取地区信息

function get_area(card_id varchar2) return varchar2 is
-- IDCardLen integer;
v_area_name varchar2(100);
begin
-- IDCardLen := length(card_id);
if is_idcard(card_id) = 0 then
return '身份证号码错误,请核查!';
end if;

select a.area_name
into v_area_name
from idcard_area a
where a.area_no = substr(card_id, 1, 6);
return v_area_name;
end get_area;
--获取出生日期
function get_day(card_id varchar2) return varchar2 is
v_year varchar2(100);
v_mounth varchar2(100);
v_day varchar2(100);
begin
if is_idcard(card_id) = 0 then
return '身份证号码错误,请核查!';
end if;

select substr(card_id, 7, 4) into v_year from dual;
select substr(card_id, 11, 2) into v_mounth from dual;
select substr(card_id, 13, 2) into v_day from dual;
return v_year || '年' || v_mounth || '月' || v_day || '日';
end get_day;

----身份信息简介

function get_card_info(card_id varchar2) return varchar2 is

-- v_name varchar2(200) ;--姓名
v_age varchar2(200); --年龄
v_sex varchar2(200); --性别
v_area varchar2(200); --地区
v_day varchar2(200); --出生日期

begin
if is_idcard(card_id) = 0 then
return '身份证号码错误,请核查!';
end if;
if is_idcard(card_id) = 1 then
v_age := get_age(card_id);
v_sex := get_sex(card_id);
v_area := get_area(card_id);
v_day := get_day(card_id);

return '年龄:' || v_age || ',性别:' || v_sex || ',地区:' ||
v_area || ',出生年月:' || v_day;
end if;
end get_card_info;

--身份信息简介

procedure id_card_info(card_id varchar2, out_msg out varchar) is

-- v_name varchar2(200) ;--姓名
v_age varchar2(200); --年龄
v_sex varchar2(200); --性别
v_area varchar2(200); --地区
v_day varchar2(200); --出生日期

begin
if is_idcard(card_id) = 0 then
out_msg := '身份证号码错误,请核查!';
end if;
if is_idcard(card_id) = 1 then
v_age := get_age(card_id);
v_sex := get_sex(card_id);
v_area := get_area(card_id);
v_day := get_day(card_id);

out_msg := '年龄:' || v_age || ',性别:' || v_sex || ',地区:' ||
v_area || ',出生年月:' || v_day;
dbms_output.put_line('年龄:' || v_age || ',性别:' || v_sex ||
',地区:' || v_area || ',出生年月:' || v_day);
end if;
end;

end sp_id_card;
/

分享到:
评论

相关推荐

    plsql11汉化包

    "plsql11汉化包"正是为了解决这个问题,提供了一个方便的中文语言环境,让用户能够更加舒适地操作和理解PLSQL Developer的各项功能。 PLSQL Developer的汉化过程通常是通过安装汉化包来完成的。"plsql developer 11...

    PLSQL中文语言包

    总之,"PLSQL中文语言包"为使用中文的开发者提供了一个更友好的开发环境,使得在Oracle数据库管理上使用PLSQL更加顺畅和高效。通过深入学习和实践,开发者可以充分利用PLSQL的强大功能,解决各种复杂的数据库问题。

    plsql8.0汉化包

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL代码。在8.0版本中,为了方便中文用户使用,官方或社区提供了汉化包,使得界面和帮助文档能够显示为中文,提高中国用户的...

    plsql 中文语言包

    PL/SQL Developer是一款深受数据库管理员和开发人员喜爱的集成开发环境(IDE),专门用于Oracle数据库的PL/SQL编程。这款工具提供了丰富的功能,包括代码编辑、调试、数据浏览和数据库管理等,极大地提升了开发效率...

    PLSQL Developer 8.0汉化包

    这个8.0版本的汉化包是专为那些需要中文界面的用户设计的,使得国内用户在使用PLSQL Developer时能更加方便地理解和操作。 PLSQL Developer的主要特点包括: 1. **代码编辑器**:提供了智能感知功能,可以自动完成...

    PLSQL12完美汉化包

    这款工具提供了一个集成的环境,使得数据库管理员和开发人员能够更高效地编写、调试、执行和管理Oracle数据库中的PL/SQL代码。"PLSQL12完美汉化包"意味着这个软件已经被翻译成中文,从而为中国用户提供了更加友好的...

    EBS环境下PLSQL开发

    EBS环境下PLSQL请求开发模版提供了一个基本的框架,帮助开发者快速开发并发请求。模版包括请求的生命周期、结果状态、调试和跟踪模式等方面的内容。 请求相关后台数据库 在EBS环境下,PLSQL开发需要了解请求相关...

    plsql9汉化包

    汉化包的主文件“chinese.exe”很可能是一个可执行文件,用户需要运行这个程序来安装汉化组件。这个文件的作用是将PLSQL Developer的英文界面替换为中文界面,包括菜单、对话框、提示信息等。在安装过程中,用户应...

    plsql chinese 语言包

    plsql chinese 语言包

    PLSQL链接jar包

    plsql工具没有链接为选项,导入这个jar包可以展示,完美解决! 这个时候需要一个指定的oci.dll的文件,这个文件随便放到一个里面,然后在工具配置里面,配置到指定的这个文件之后,在打开PLSQL就可以了。

    PLSQLDeveloper12.0.7汉化包.rar

    3. **汉化方法**:使用汉化包一般分为两步,首先完成软件的原版安装,然后运行汉化包,通常是运行一个批处理文件或执行程序,按照提示操作即可完成汉化。 4. **兼容性**:确认汉化包与PLSQL Developer的版本匹配,...

    plsql12汉化包

    "plsql12汉化包"指的是针对PLSQL Developer 12版本的一个中文语言包,旨在为用户提供了中文界面,使得那些不熟悉英文或者更习惯中文环境的用户能够更加方便地使用这个软件。 PLSQL Developer 12的功能主要包括: 1...

    plsql汉化包

    首先,你需要下载到这个汉化包,通常是一个名为"chinese.exe"的可执行文件。运行这个文件后,按照向导的指示进行操作。一般来说,你会被要求指定PLSQL Developer的安装路径,这是因为汉化包需要将中文资源文件复制到...

    plsql developer10汉化包

    这款工具提供了一个集成的环境,使得编写、测试和调试PL/SQL代码变得更加便捷。汉化包则是为了让非英文用户能更好地理解和使用该软件,将原本英文界面翻译成中文的语言包。 1. PLSQL Developer的功能特点: - 用户...

    PLSQL注册码以及汉化包

    PLSQL,全称为PL/SQL,是Oracle数据库系统中用于...总的来说,PLSQL是Oracle数据库开发的重要工具,而PLSQL Developer则是一个实用的辅助工具,通过注册码和汉化包,可以更方便地在中国地区使用和管理Oracle数据库。

    PLSQL带中文包

    标题中的"PLSQL带中文包"意味着这个压缩包包含了PLSQL Developer的安装程序,并且已经包含了支持简体中文的语言包,这对于中文用户来说是非常方便的,可以避免在安装过程中寻找额外的语言资源。 描述中提到的"PLSQL...

    PLSQL汉化包

    1. 下载并解压汉化包:首先从可靠来源下载PLSQL Developer的汉化包,解压到一个本地文件夹。 2. 备份原始文件:为了防止出错,建议先备份PLSQL Developer的原始文件,尤其是可能被替换的资源文件。 3. 安装汉化:...

    plsql工具包含汉化包

    用户在安装完主程序后,运行这个汉化包,可以将软件设置为中文界面,大大降低了语言障碍,提升了用户体验。 "安装说明.txt"文件提供了详细的安装步骤和注意事项,用户在安装PLSQL Developer时应仔细阅读,遵循指南...

Global site tag (gtag.js) - Google Analytics