oracle 函数 验证身份证号是否正确

来源:互联网 发布:吕秀才说死姬无命 知乎 编辑:程序博客网 时间:2024/05/26 22:59

自己测试了一把,如果有纰漏之处,欢迎指正。


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;
原创粉丝点击