DB2 15位身份证号转18位函数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SET CURRENT SCHEMA = DB2INST1;

CREATE OR REPLACE FUNCTION BDATA.F_N_SFZ (OLD_NO VARCHAR (18))

RETURNS VARCHAR (18)

LANGUAGE SQL

BEGIN ATOMIC

/*定义变量部分*/

DECLARE v_sfz VARCHAR (20);---转换后身份证号

DECLARE v_no VARCHAR (15);---传入15位身份证号

declare i integer default 1;---递增变量

declare v_res integer default 0;---逻辑处理变量

DECLARE V_jym CHARACTER(1);---校验码

/*逻辑处理部分*/

/*1、6位日期转换为8位日期*/

SET v_no = OLD_NO;

SET v_sfz = substr (v_no, 1, 6)||'19'||substr (v_no, 7, 9);

/*2、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。*/

while i<18 do

set v_res =v_res + (substr(v_sfz,i,1)*decode(i,1,7,2,9,3,10,4,5,5,8,6,4,7,2,8,1,9,6,10,3,11,7,12,9,13,10,14,5,15,8,16,4 ,17,2));

set i =i + 1;

end while;

CALL dbms_output.put_line (i||','||v_res);

/*3、相加的和除以11,取余数,余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。*/

setv_res=MOD(v_res,11);

set V_jym = decode(v_res,0,'1',1,'0',2,'X',3,'9',4,'8',5,'7',6,'6',7,'5',8,'4',9,'3',10,'2');

setv_sfz = CONCAT(v_sfz,V_jym);

/*返回结果部分*/

RETURN v_sfz;

END;

相关文档
最新文档