17,086
社区成员
发帖
与我相关
我的任务
分享
create or replace function f_checkid(p_id NUMBER) RETURN VARCHAR2 IS
TYPE typ_nums IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
v_nums typ_nums;
--v_index NUMBER;
v_i NUMBER := 0;
--i NUMBER ;
k NUMBER := 0;
v_sum NUMBER := 0;
v_sum1 NUMBER := 0;
v_idn NUMBER := 0;
v_mod NUMBER := 0;
v_result VARCHAR2(2):= 0;
BEGIN
--FOR k IN ('1','2') LOOP
--i := [7, 9, 10, 5, 8, 4, 2, 1, 3, 6, 7, 9, 10, 5, 8, 4, 2].first;
v_nums(1) := 7;
v_nums(2) := 9;
v_nums(3) := 10;
v_nums(4) := 5;
v_nums(5) := 8;
v_nums(6) := 4;
v_nums(7) := 2;
v_nums(8) := 1;
v_nums(9) := 6;
v_nums(10) := 3;
v_nums(11) := 7;
v_nums(12) := 9;
v_nums(13) := 10;
v_nums(14) := 5;
v_nums(15) := 8;
v_nums(16) := 4;
v_nums(17) := 2;
--i := v_nums.first;
while k < 17 LOOP
k :=k + 1;
v_i :=v_nums(k);
dbms_output.put_line(k);
--dbms_output.put_line(v_i);
v_idn :=substr(p_id,k,1);
dbms_output.put_line(v_idn);
v_sum1 :=v_i*v_idn;
v_sum := v_sum + v_sum1;
--i := v_nums.next(i);
end loop;
--dbms_output.put_line(v_sum);
v_mod := mod(v_sum,11);
IF v_mod= 0 THEN v_result := '1';
ELSIF v_mod= 1 THEN v_result := '0';
ELSIF v_mod= 2 THEN v_result := 'X';
ELSIF v_mod= 3 THEN v_result := '9';
ELSIF v_mod= 4 THEN v_result := '8';
ELSIF v_mod= 5 THEN v_result := '7';
ELSIF v_mod= 6 THEN v_result := '6';
ELSIF v_mod= 7 THEN v_result := '5';
ELSIF v_mod= 8 THEN v_result := '4';
ELSIF v_mod= 9 THEN v_result := '3';
ELSIF v_mod= 10 THEN v_result := '2';
ELSE NULL;
END IF;
RETURN v_result;
end f_checkid;
create or replace function f_checkid(p_id NUMBER) RETURN NUMBER IS
TYPE typ_nums IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
v_nums typ_nums;
--v_index NUMBER;
i NUMBER := 0;
v_sum NUMBER := 0;
v_sum1 NUMBER := 0;
BEGIN
--FOR k IN ('1','2') LOOP
--i := [7, 9, 10, 5, 8, 4, 2, 1, 3, 6, 7, 9, 10, 5, 8, 4, 2].first;
v_nums(1) := 7;
v_nums(2) := 9;
v_nums(3) := 10;
v_nums(4) := 5;
v_nums(5) := 8;
v_nums(6) := 4;
i := v_nums.first;
while i is not null loop
dbms_output.put_line(i);
v_sum := v_sum + v_nums(i);
i := v_nums.next(i);
end loop;
dbms_output.put_line(v_sum);
RETURN v_sum;
end f_checkid;
CREATE OR REPLACE FUNCTION f_checkid(p_id NUMBER) RETURN NUMBER IS
i NUMBER := 0;
v_sum NUMBER := 0;
v_sum1 NUMBER := 0;
v_num_list VARCHAR2(1000) := '7, 9, 10, 5, 8, 4, 2, 1, 3, 6, 7, 9, 10, 5, 8, 4, 2'; --将数字串保留在字符串中
v_len NUMBER := length(v_num_list) - length(REPLACE(v_num_list, ',')) + 1; --取得数据串中数字的个数,就是逗号的个数加1
v_current_num NUMBER; --保存循环中的数字串的当前值
v_i NUMBER;
BEGIN
FOR k IN 1 .. v_len LOOP
v_current_num := to_number(regexp_substr(v_num_list, '(\d)+', 1, i)); --取得当前值
i := i + 1;
v_sum := v_sum + v_sum1;
v_i := substr(p_id, i, 1);
v_sum1 := v_current_num * v_i;
END LOOP;
dbms_output.put_line(v_sum);
RETURN v_sum;
END f_checkid;