以前从来没想过要这种函数,后来公司说,程序里的一些重要的编号都要带一个验证码,要求我使用身份证的校验码方法,我从公司以前的oracle数据库里找到了以下的oracle函数,公布一下,大家共享一下,哈哈.使用了这个函数的朋友记得常来我这里顶顶哦.巴士飞扬 www.busfly.cn 时刻 欢迎你的来访,共同学习进步
-- 生成身份证号码的 校验位 ISO 7064:1983.MOD 11-2校验码计算出来的检验码(公司内部函数,保密,保密~~~~~)
create or replace function getVerify_ISO7064(
idcard in varchar2
) return varchar
as
type vi_TYPE is varray(11) of varchar2(1);
vi vi_TYPE := vi_TYPE('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
v_num number;
v_sum number;
begin
if idcard is null then return null ; end if;
v_sum := 0;
v_num := length(idcard);
for i in 1 .. v_num loop
v_sum := v_sum + (power(2,v_num -i+1) mod 11 ) * to_number(substr(idcard,i,1));
-- DBMS_OUTPUT.PUT_LINE(v_sum);
end loop;
v_sum := v_sum mod 11;
return vi(v_sum+1);
end getVerify_ISO7064;
OK了,现在你可以用你的身份证试一下了,你的身份证最后一位就是验证码,把最后一位留下,其它的当参数输入进去查一下就知道了,这个函数不是专门为身份证做的,任意长度的都可以.我公司是用来作为编号的最后一位.
以下是公司里的用法,再写了一个函数,将产生的验证码的X改成0,因为编号里一般只有数字,再连接到原字符串后面,返回:
create or replace function make_Verify_pcard_id (
idcard in varchar2 --未带校验位的纸卡编号
) return varchar
as -- 生成带校验位的纸卡编号
v_verify_char varchar2(1);
begin
v_verify_char := getVerify_ISO7064(idcard) ;
if v_verify_char = 'X' then v_verify_char := '0'; end if;
return idcard || v_verify_char;
end ;
我后来把这个仿照这个函数,改装成了VC++的函数,代码现在找不到了,等找到了,再发布一下吧
Tags: oracle数据库 |
原创文章如转载,请注明:转载自:巴士飞扬-技术BLOG : http://www.busfly.net/
本文链接地址:http://www.busfly.net/post/oracle-pass-make_Verify_pcard_id.html
如果你喜欢本文,请顶一下,支持我,你的支持是我继续发好文章的最大动力。谢谢。
好东西需要分享,快把本文发给你的朋友吧~!~