荷兰银行帐户由9位数字组成,例如:1334.36.915。为了检查银行账户是否有效,我们使用所谓的‘11-proef’(11-测试)。在此测试中,将每个数字与其在row.The中的位置相乘,并将乘法的结果相加。
(1*9)+(3*8)+(3*7)+(4*6)+(3*5)+(6*4)+(9*3)+(1*2)+(5*1) = R这个结果必须能被11整除。这意味着除法的余数必须是0。如果R可以被11整除,那么银行帐号是有效的!
有人能帮我回答这个问题吗?
发布于 2016-05-03 21:16:33
荷兰银行账号不再由9位数字组成,我们现在使用Iban号码。如果您想对其进行检查,则应该查看https://en.wikipedia.org/wiki/International_Bank_Account_Number#Validating_the_IBAN并实现该检查。
现在,你仍然可以检查最后9或10位数的11位数,但不能保证将来仍然适用于新的银行账户。
如果你仍然想做一个11-check,你可以创建一个这样的函数:
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;发布于 2016-05-03 21:46:22
这给出了除法的剩余部分为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检查;):
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)
)
)https://stackoverflow.com/questions/37004486
复制相似问题