首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(PL\SQL) Luhn校验号生成

(PL\SQL) Luhn校验号生成
EN

Stack Overflow用户
提问于 2018-10-15 23:20:11
回答 1查看 923关注 0票数 0

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

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

EN

回答 1

Stack Overflow用户

发布于 2018-10-15 23:23:22

这一结果适用于每个长度的数字序列。

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52819914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档