一直负责项目的数据清理工作,旧系统的身份证号码进入新系统需要转换,根据网上的资料,写了个函数。功能比一般的要强,因为不但能将15位转18位,还能将16,17位转成18位,实属无奈啊!
CREATE OR REPLACE FUNCTION GETID(OLD_ID IN VARCHAR2) RETURN VARCHAR2 IS
--RESULT VARCHAR2(18);
ID VARCHAR2(17);
ID_TEMP VARCHAR2(18);
FLAG CHAR;
FLAG1 INT;
--FLAG2 INT;
BEGIN
ID_TEMP := TRIM(OLD_ID);
IF LENGTH(ID_TEMP) < 15 THEN
RETURN ID_TEMP;
END IF;
ID := CASE LENGTH(ID_TEMP)
--18位,去最后一位
WHEN 18 THEN SUBSTR(ID_TEMP, 1, 17)
--17位,不变
WHEN 17 THEN ID_TEMP
--16位,去掉最后一位 ,加19
WHEN 16 THEN SUBSTR(ID_TEMP, 1, 6) || '19' || SUBSTR(ID_TEMP, 7, 9)
--15位,加19
WHEN 15 THEN SUBSTR(ID_TEMP, 1, 6) || '19' || SUBSTR(ID_TEMP, 7, 9) END;
BEGIN
FLAG1 := TO_NUMBER(SUBSTR(ID, 1, 1)) * 7 +
TO_NUMBER(SUBSTR(ID, 2, 1)) * 9 +
TO_NUMBER(SUBSTR(ID, 3, 1)) * 10 +
TO_NUMBER(SUBSTR(ID, 4, 1)) * 5 +
TO_NUMBER(SUBSTR(ID, 5, 1)) * 8 +
TO_NUMBER(SUBSTR(ID, 6, 1)) * 4 +
TO_NUMBER(SUBSTR(ID, 7, 1)) * 2 +
TO_NUMBER(SUBSTR(ID, 8, 1)) * 1 +
TO_NUMBER(SUBSTR(ID, 9, 1)) * 6 +
TO_NUMBER(SUBSTR(ID, 10, 1)) * 3 +
TO_NUMBER(SUBSTR(ID, 11, 1)) * 7 +
TO_NUMBER(SUBSTR(ID, 12, 1)) * 9 +
TO_NUMBER(SUBSTR(ID, 13, 1)) * 10 +
TO_NUMBER(SUBSTR(ID, 14, 1)) * 5 +
TO_NUMBER(SUBSTR(ID, 15, 1)) * 8 +
TO_NUMBER(SUBSTR(ID, 16, 1)) * 4 +
TO_NUMBER(SUBSTR(ID, 17, 1)) * 2;
EXCEPTION
WHEN OTHERS THEN
RETURN ID_TEMP;
END;
FLAG1 := MOD(FLAG1, 11);
FLAG := CASE FLAG1 WHEN 0 THEN '1' WHEN 1 THEN '0' WHEN 2 THEN 'X' WHEN 3 THEN '9' WHEN 4 THEN '8' WHEN 5 THEN '7' WHEN 6 THEN '6' WHEN 7 THEN '5' WHEN 8 THEN '4' WHEN 9 THEN '3' WHEN 10 THEN '2' END;
RETURN ID || FLAG;
END GETID;
/
分享到:
相关推荐
Oracle身份证号码校验函数,可以将15位身份号码升为18位,检验出生年月等信息
该函数是支持Oracle环境下的对身份照进行校验的函数,它是按照身份照计算算法去校验的,能够精准的判断出身份照是否合法,通过返回值为1:表示为正确的身份证,返回值为0表示为错误的身份证
根据提供的Oracle身份证验证函数的信息,我们可以详细探讨一下这个函数的设计逻辑、实现原理以及各个部分的具体功能。 ### Oracle身份证验证函数概述 此Oracle函数名为`Func_checkIdcard`,其主要功能是验证输入的...
oracle 身份证号检查函数; select fn_checkidcard(‘身份证号’) as result from dual; 如果返回1,表示身份证号合法;如果为0,表示非法;
身份证升位,15to18
接下来,我们详细分析给出的SQL函数`get_date_sex`,该函数用于从身份证号码中提取出生日期或性别。 #### SQL函数定义 ```sql CREATE FUNCTION get_date_sex(@s varchar(18), @t varchar(4)) RETURNS varchar(10) ...
Oracle数据库在处理身份证号码相关的查询时,经常需要提取其中的个人信息,例如省市、性别和年龄。以下我们将详细探讨如何利用Oracle SQL实现这些功能。 首先,我们来看如何通过身份证号得到省市。在中国,身份证...
3、兼容性与灵活性: 适用于各种 Oracle 数据库环境,无论是本地部署还是云数据库,均可无缝集成,满足不同场景需求。 4、详尽注释文档: 提供了完整的函数代码及详细的注释说明,便于用户快速理解与应用,同时降低...
总之,通过在Oracle中使用Java实现身份证转换,可以有效解决数据库中15位和18位身份证号码共存的问题,提高业务处理的灵活性和准确性。这种技术方法对于维护数据的一致性和处理复杂业务逻辑具有重要的意义。同时,这...
Oracle自定义脱敏函数是数据库管理中用于保护敏感数据的一种常见方法,尤其是在处理用户个人信息时。本文将深入解析Oracle自定义脱敏函数的实现细节,以确保在数据共享、备份或分析时不泄露关键信息。 首先,我们来...
批量按身份证查出生年月日公式函数,快速算出出生年月日。
包含自定义身份证函数,小写转大写等等。自己总结了很长时间,以后会继续更新的。
在Oracle数据库系统中,"统一社会信用代码"(Unified Social Credit Code,USCC)是一种用于企业和组织的独特标识,类似于个人的身份证号码。它由18位数字组成,包含丰富的信息,如行政区划代码、机构类型、登记序号...
首先,可以创建一个函数来计算18位身份证号的校验码,然后遍历所有需要升位的记录,调用该函数更新身份证号字段。此外,可能还需要处理可能出现的数据冲突,如顺序码冲突,确保升位后的号码是唯一的。 在进行身份证...
总的来说,要理解并实现这个任务,你需要熟悉PowerBuilder的函数编写和Oracle的存储过程设计,同时要掌握15位到18位身份证号码转换的逻辑。通过阅读提供的文件,你将能够获取具体的操作指南和代码示例,进一步加深对...
### Oracle正则表达式 #### 一、简介 在Oracle 10g版本开始,数据库引入了对正则表达式的支持。正则表达式是一种强大的工具,用于模式匹配和文本处理,可以用来搜索、替换、提取等操作。通过正则表达式,用户可以...
在学习Oracle时,理解并掌握数据类型和函数是至关重要的基础。本章主要探讨Oracle中的数据类型,包括概述、字符数据类型、数值数据类型、日期类型以及其他特殊类型。 4.1.1 数据类型的概述 数据类型是数据库中用于...