1. 程式人生 > >oracle 函式 驗證身份證號是否正確

oracle 函式 驗證身份證號是否正確

自己測試了一把,如果有紕漏之處,歡迎指正。

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;