oracle 函式 驗證身份證號是否正確
阿新 • • 發佈:2019-02-13
自己測試了一把,如果有紕漏之處,歡迎指正。
create or replace function f_check_id_number(p_number varchar2) return number is
type tbl_t is table of number;my_tbl tbl_t := tbl_t(7,
9,
10,
5,
8,
4,
2,
1,
6,
3,
7,
9,
10,
5,
8,
4,
2); --初始化
i number := 0;
sum_result number := 0;
sub_str number;
begin
for i in 1 .. length(p_number) - 1 loop
sub_str := substr(p_number, i, 1);
sum_result := sum_result + sub_str * my_tbl(i);
end loop;
sub_str := mod(sum_result, 11);
select decode(sub_str,
0,
1,
1,
0,
2,
'X',
3,
9,
4,
8,
5,
7,
6,
6,
7,
5,
8,
4,
9,
3,
10,
2)
into sum_result
from dual;
if substr(p_number, length(p_number), 1) <> sum_result then
return 0;
else
return 1;
end if;
end;