/** * Calculates Czech/Slovak IBAN * * Note: Garbage in means garbage out, so you should check what you * are sending in as parameters. * * @author Jirka Pech * @copyright 1core, s.r.o. * @param varchar2 i_account Normal account number which should contain one slash * @param varchar2 i_country ISO standard country code * * @return varchar2 IBAN International Bank Account Number * */ CREATE OR REPLACE FUNCTION IBAN ( i_account IN VARCHAR2, i_country IN VARCHAR2 DEFAULT 'CZ') RETURN VARCHAR2 IS x_account VARCHAR2(30); x_slash NUMBER; bankaccount VARCHAR2(30); bankcode CHAR(4); country CHAR(2); BEGIN x_account := REPLACE(REPLACE(i_account, '-', ''), ' ', ''); x_slash := INSTR(x_account, '/'); -- add some necessary padding and such a things bankaccount := LPAD(SUBSTR(x_account, 1, x_slash - 1), 16, '0'); bankcode := LPAD(SUBSTR(x_account, x_slash + 1), 4, '0'); country := UPPER(i_country); -- join everything together x_account := bankcode || bankaccount || TO_CHAR(ASCII(SUBSTR(country, 1, 1)) - 55) || TO_CHAR(ASCII(SUBSTR(country, 2, 1)) - 55) || '00'; RETURN country || LPAD(98 - MOD(x_account, 97), 2, '0') || bankcode || bankaccount; END; /