Plsql PL/SQL中的11-证明方法
荷兰银行账户由9位数字组成,例如:1334.36.915。 为了检查银行账户是否有效,我们使用所谓的“11 proef”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号码。如果您想对它进行
(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应该通知他的老师他的材料已经过时;