2016-05-03 3 views
0

オランダの銀行口座は、9桁の数字(例:)で構成されています。 銀行口座が有効かどうかを確認するには、いわゆる「11-proef」(11-テスト)を使用します。 このテストでは、各桁に行のその位置が乗算されます。この乗算の結果が加算されます。11- PL/SQLの証明方法

(1*9)+(3*8)+(3*7)+(4*6)+(3*5)+(6*4)+(9*3)+(1*2)+(5*1) = R 

この結果は、Rは、銀行口座番号が有効である11で分割可能である場合には除算の余りが0 でなければならないことを意味し11によって分割可能である必要があります!

誰かがこの質問をお手伝いできますか?

+0

uhm、ポストバンクには数字はありません。現在、私たちはIBANのヨーロッパ標準を採用しています。銀行口座は、ibanの移行前に10桁の数字を持つこともできました。 – Tschallacka

+2

@MichaelDibbetsこれは宿題のようです。それは問題ではありません:) – Mottor

+0

その場合、Bojidar Conevは彼の教材に古くなっていることを教えてください; – ErikL

答えて

1

オランダの銀行口座番号は9桁ではなくなりました。私たちは現在、イバン番号を使用しています。チェックをしたい場合は、https://en.wikipedia.org/wiki/International_Bank_Account_Number#Validating_the_IBANを見て、そのチェックを実装する必要があります。

今のところ、最後の9桁または10桁を11チェックすることはできますが、今後新しい銀行口座では引き続き機能するとは限りません。

あなたはまだ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; 
1

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) 
      ) 
    ) 
+0

wheres the indentation? ;) –

+0

@NullException IDENT me;)編集ボタンを使用 – Mottor

+0

私は同意する、私は(N)あなたを傷つけるべきである。あなたはNを逃した。 –

関連する問題