【问题标题】:(PL\SQL) Luhn check number generating(PL\SQL) Luhn 检查号码生成
【发布时间】:2018-10-15 15:20:10
【问题描述】:

如果我对数列运行 Luhn 公式检查,并且返回数字为 0,则数列是有效的(不是随机的)。我有一个随机数序列,但我需要一个 Luhn 数生成器,它返回一个数字。这个数字应该填写随机数序列以用 0 重新调整 Luhn 公式检查。

如何将这个 Luhn 数生成器创建为函数?

【问题讨论】:

    标签: plsql checksum luhn


    【解决方案1】:

    此结果适用于所有长度的数列。

    CREATE OR REPLACE luhn_num (orig_num IN NUMBER)
    RETURN STRING IS
      num_len NUMBER(20) := length(orig_num);
      result_num NUMBER(10);
      i NUMBER(10);
      temp_num NUMBER(10);
      sum_num NUMBER(10) := 0;
    
    BEGIN
      IF MOD(num_len,2) = 0 THEN 
        FOR i IN 1..num_len LOOP
          IF MOD(i,2) = 0 THEN
            IF length(to_number(substr(orig_num,i,1))*2) > 1 THEN
              sum_num :=  sum_num + to_number(substr(to_number(substr(orig_num,i,1))*2,1,1)) + to_number(substr(to_number(substr(orig_num,i,1))*2,2,1));
            ELSE
              sum_num := sum_num + (to_number(substr(orig_num,i,1))*2);
            END IF;
          ELSE
            sum_num := sum_num + to_number(substr(orig_num,i,1));
          END IF;
        END LOOP;
      ELSE
        FOR i IN 1..num_len LOOP
          IF MOD(i,2) <> 0 THEN
            IF length(to_number(substr(orig_num,i,1))*2) > 1 THEN
              sum_num :=  sum_num + to_number(substr(to_number(substr(orig_num,i,1))*2,1,1)) + to_number(substr(to_number(substr(orig_num,i,1))*2,2,1));
            ELSE
              sum_num := sum_num + (to_number(substr(orig_num,i,1))*2);
            END IF;
          ELSE
            sum_num := sum_num + to_number(substr(orig_num,i,1));
          END IF;
        END LOOP;
      END IF;
    
      temp_num := 10 - to_number(substr(sum_num,length(sum_num),1));
    
      IF temp_num = 10 THEN
        result_num := 0;
      ELSE
        result_num := temp_num;
      END IF;
    
      RETURN result_num ;
    END;
    

    【讨论】:

      猜你喜欢
      • 2018-06-14
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      • 1970-01-01
      相关资源
      最近更新 更多