Plsql PL/SQL中的11-证明方法

Plsql PL/SQL中的11-证明方法,plsql,Plsql,荷兰银行账户由9位数字组成,例如:1334.36.915。 为了检查银行账户是否有效,我们使用所谓的“11 proef”11测试。 在这个测试中,每个数字都与它在行中的位置相乘。相乘的结果相加 (1*9)+(3*8)+(3*7)+(4*6)+(3*5)+(6*4)+(9*3)+(1*2)+(5*1) = R 这个结果必须除以11。这意味着除法的余数必须为0。 如果R可除以11,则银行账号有效 有人能帮我们解答这个问题吗?荷兰银行账号不再由9位数字组成,我们现在使用Iban号码。如果您想对它进行

荷兰银行账户由9位数字组成,例如:1334.36.915。 为了检查银行账户是否有效,我们使用所谓的“11 proef”11测试。 在这个测试中,每个数字都与它在行中的位置相乘。相乘的结果相加

(1*9)+(3*8)+(3*7)+(4*6)+(3*5)+(6*4)+(9*3)+(1*2)+(5*1) = R
这个结果必须除以11。这意味着除法的余数必须为0。 如果R可除以11,则银行账号有效


有人能帮我们解答这个问题吗?

荷兰银行账号不再由9位数字组成,我们现在使用Iban号码。如果您想对它进行检查,您应该查看并实现该检查

现在,你仍然可以在最后9位或10位上使用11位支票,但不能保证在将来新的银行账户仍然有效

如果仍要执行11检查,可以创建如下函数:

CREATE OR REPLACE FUNCTION elfproof (accountnummer IN varchar2)
   RETURN VARCHAR2
AS
      multiplier int:= 10;
      outcome varchar2(10);
      total int := 0;
BEGIN
   FOR i IN 1 .. 9
   LOOP

     multiplier := multiplier - 1;
      total := total + (multiplier * TO_NUMBER (SUBSTR (accountnummer, i, 1)));

   END LOOP;

   IF MOD (total, 11) = 0
   THEN
      outcome := 'good';
   ELSE
      outcome := 'bad';
   END IF;

   return outcome;
END;

荷兰银行账号不再由9位数字组成,我们现在使用Iban号码。如果您想对它进行检查,您应该查看并实现该检查

现在,你仍然可以在最后9位或10位上使用11位支票,但不能保证在将来新的银行账户仍然有效

如果仍要执行11检查,可以创建如下函数:

CREATE OR REPLACE FUNCTION elfproof (accountnummer IN varchar2)
   RETURN VARCHAR2
AS
      multiplier int:= 10;
      outcome varchar2(10);
      total int := 0;
BEGIN
   FOR i IN 1 .. 9
   LOOP

     multiplier := multiplier - 1;
      total := total + (multiplier * TO_NUMBER (SUBSTR (accountnummer, i, 1)));

   END LOOP;

   IF MOD (total, 11) = 0
   THEN
      outcome := 'good';
   ELSE
      outcome := 'bad';
   END IF;

   return outcome;
END;

这就得到了第11条除法的剩余部分:

SELECT 
    MOD (SUM (TO_NUMBER (SUBSTR (str, LEVEL, 1)) * (10 - LEVEL)), 11) remdiv11
FROM 
    (
        SELECT 
            REPLACE ('1334.36.915', '.') str 
        FROM 
            DUAL
    ) d
CONNECT BY LEVEL <= LENGTH (str)
和IBAN check;:

SELECT 
    DECODE (MOD (TO_NUMBER (LISTAGG (n, '') WITHIN GROUP (ORDER BY l)), 97), 1, 'OK', 'Fail') AS iban_check
FROM 
    (
        SELECT 
            TO_CHAR (CASE 
                        WHEN ASCII (c) >= 65 THEN ASCII (c) - 55 
                        ELSE ASCII (c) - 48 END) n, c, l
        FROM 
            (    
                SELECT 
                    SUBSTR (str, LEVEL, 1) c, LEVEL l
                FROM 
                    (
                        SELECT 
                            SUBSTR (s, 5) || SUBSTR (s, 1, 4) str
                        FROM 
                            (
                                SELECT 
                                    REPLACE ('GB82 WEST 1234 5698 7654 32', ' ') s 
                                FROM
                                    DUAL
                            )
                    )
                CONNECT BY LEVEL <= LENGTH (str)
            )
    )

这就得到了第11条除法的剩余部分:

SELECT 
    MOD (SUM (TO_NUMBER (SUBSTR (str, LEVEL, 1)) * (10 - LEVEL)), 11) remdiv11
FROM 
    (
        SELECT 
            REPLACE ('1334.36.915', '.') str 
        FROM 
            DUAL
    ) d
CONNECT BY LEVEL <= LENGTH (str)
和IBAN check;:

SELECT 
    DECODE (MOD (TO_NUMBER (LISTAGG (n, '') WITHIN GROUP (ORDER BY l)), 97), 1, 'OK', 'Fail') AS iban_check
FROM 
    (
        SELECT 
            TO_CHAR (CASE 
                        WHEN ASCII (c) >= 65 THEN ASCII (c) - 55 
                        ELSE ASCII (c) - 48 END) n, c, l
        FROM 
            (    
                SELECT 
                    SUBSTR (str, LEVEL, 1) c, LEVEL l
                FROM 
                    (
                        SELECT 
                            SUBSTR (s, 5) || SUBSTR (s, 1, 4) str
                        FROM 
                            (
                                SELECT 
                                    REPLACE ('GB82 WEST 1234 5698 7654 32', ' ') s 
                                FROM
                                    DUAL
                            )
                    )
                CONNECT BY LEVEL <= LENGTH (str)
            )
    )

压痕在哪里@你可以认出我;使用编辑按钮我同意,我应该给你缩进。你错过了N.@NullException我已经批准了,但你知道,这是一种风格。一切都是用蟾蜍格式化器格式化的。对我来说,前一个更好。我手动在记事本++中缩进它。至少对我来说,蟾蜍还能产生另一种结果。如果您愿意,可以回滚编辑,无论您是否接受,都会提出建议。缩进在哪里@你可以认出我;使用编辑按钮我同意,我应该给你缩进。你错过了N.@NullException我已经批准了,但你知道,这是一种风格。一切都是用蟾蜍格式化器格式化的。对我来说,前一个更好。我手动在记事本++中缩进它。至少对我来说,蟾蜍还能产生另一种结果。如果您愿意,请回滚编辑,建议已提出,无论您是否接受。嗯,不,它不。。。邮政银行有任意数量的数字,现在我们使用的是IBAN的欧洲标准。在iban过渡之前,银行账户也可能有10位数。@Michaeldibtes这看起来像是一个家庭作业。没关系:在这种情况下,Bojidar Conev应该通知他的老师他的材料已经过时;嗯,不,它不。。。邮政银行有任意数量的数字,现在我们使用的是IBAN的欧洲标准。在iban过渡之前,银行账户也可能有10位数。@Michaeldibtes这看起来像是一个家庭作业。没关系:在这种情况下,Bojidar Conev应该通知他的老师他的材料已经过时;