1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
CREATE DEFINER = 'root'@'%'
FUNCTION TestIBAN(iban VARCHAR(255))
RETURNS bigint(20)
BEGIN
DECLARE t varchar(100);
DECLARE iso varchar(100);
DECLARE finished INTEGER DEFAULT 0;
DECLARE ok bool;
DECLARE a varchar(50);
DECLARE b varchar(50);
DECLARE pays char(2);
DECLARE II bigint;
DECLARE C CURSOR FOR
SELECT *
FROM
countries ;
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET finished = 1;
IF TRIM(iban) = '' THEN
RETURN FALSE;
END IF;
DROP TEMPORARY TABLE IF EXISTS countries;
CREATE TEMPORARY TABLE countries(code varchar(3), reg varchar(255));
INSERT INTO `countries`(`code`, `reg`) VALUES('AL', '[0-9]{8}[0-9A-Z]{16}');
INSERT INTO `countries`(`code`, `reg`) VALUES('AD', '[0-9]{8}[0-9A-Z]{12}');
INSERT INTO `countries`(`code`, `reg`) VALUES('AT', '[0-9]{16}');
INSERT INTO `countries`(`code`, `reg`) VALUES('BE', '[0-9]{12}');
INSERT INTO `countries`(`code`, `reg`) VALUES('BA', '[0-9]{16}');
INSERT INTO `countries`(`code`, `reg`) VALUES('BG', '[A-Z]{4}[0-9]{6}[0-9A-Z]{8}');
INSERT INTO `countries`(`code`, `reg`) VALUES('HR', '[0-9]{17}');
INSERT INTO `countries`(`code`, `reg`) VALUES('CY', '[0-9]{8}[0-9A-Z]{16}');
INSERT INTO `countries`(`code`, `reg`) VALUES('CZ', '[0-9]{20}');
INSERT INTO `countries`(`code`, `reg`) VALUES('DK', '[0-9]{14}');
INSERT INTO `countries`(`code`, `reg`) VALUES('EE', '[0-9]{16}');
INSERT INTO `countries`(`code`, `reg`) VALUES('FO', '[0-9]{14}');
INSERT INTO `countries`(`code`, `reg`) VALUES('FI', '[0-9]{14}');
INSERT INTO `countries`(`code`, `reg`) VALUES('FR', '[0-9]{10}[0-9A-Z]{11}[0-9]{2}');
INSERT INTO `countries`(`code`, `reg`) VALUES('GE', '[0-9A-Z]{2}[0-9]{16}');
INSERT INTO `countries`(`code`, `reg`) VALUES('DE', '[0-9]{18}');
INSERT INTO `countries`(`code`, `reg`) VALUES('GI', '[A-Z]{4}[0-9A-Z]{15}');
INSERT INTO `countries`(`code`, `reg`) VALUES('GR', '[0-9]{7}[0-9A-Z]{16}');
INSERT INTO `countries`(`code`, `reg`) VALUES('GL', '[0-9]{14}');
INSERT INTO `countries`(`code`, `reg`) VALUES('HU', '[0-9]{24}');
INSERT INTO `countries`(`code`, `reg`) VALUES('IS', '[0-9]{22}');
INSERT INTO `countries`(`code`, `reg`) VALUES('IE', '[0-9A-Z]{4}[0-9]{14}');
INSERT INTO `countries`(`code`, `reg`) VALUES('IL', '[0-9]{19}');
INSERT INTO `countries`(`code`, `reg`) VALUES('IT', '[A-Z][0-9]{10}[0-9A-Z]{12}');
INSERT INTO `countries`(`code`, `reg`) VALUES('KZ', '[0-9]{3}[0-9A-Z]{3}[0-9]{10}');
INSERT INTO `countries`(`code`, `reg`) VALUES('KW', '[A-Z]{4}[0-9]{22}');
INSERT INTO `countries`(`code`, `reg`) VALUES('LV', '[A-Z]{4}[0-9A-Z]{13}');
INSERT INTO `countries`(`code`, `reg`) VALUES('LB', '[0-9]{4}[0-9A-Z]{20}');
INSERT INTO `countries`(`code`, `reg`) VALUES('LI', '[0-9]{5}[0-9A-Z]{12}');
INSERT INTO `countries`(`code`, `reg`) VALUES('LT', '[0-9]{16}');
INSERT INTO `countries`(`code`, `reg`) VALUES('LU', '[0-9]{3}[0-9A-Z]{13}');
INSERT INTO `countries`(`code`, `reg`) VALUES('MK', '[0-9]{3}[0-9A-Z]{10}[0-9]{2}');
INSERT INTO `countries`(`code`, `reg`) VALUES('MT', '[A-Z]{4}[0-9]{5}[0-9A-Z]{18}');
INSERT INTO `countries`(`code`, `reg`) VALUES('MR', '[0-9]{23}');
INSERT INTO `countries`(`code`, `reg`) VALUES('MU', '[A-Z]{4}[0-9]{19}[A-Z]{3}');
INSERT INTO `countries`(`code`, `reg`) VALUES('MC', '[0-9]{10}[0-9A-Z]{11}[0-9]{2}');
INSERT INTO `countries`(`code`, `reg`) VALUES('ME', '[0-9]{18}');
INSERT INTO `countries`(`code`, `reg`) VALUES('NL', '[A-Z]{4}[0-9]{10}');
INSERT INTO `countries`(`code`, `reg`) VALUES('NO', '[0-9]{11}');
INSERT INTO `countries`(`code`, `reg`) VALUES('PL', '[0-9]{24}');
INSERT INTO `countries`(`code`, `reg`) VALUES('PT', '[0-9]{21}');
INSERT INTO `countries`(`code`, `reg`) VALUES('RO', '[A-Z]{4}[0-9A-Z]{16}');
INSERT INTO `countries`(`code`, `reg`) VALUES('SM', '[A-Z][0-9]{10}[0-9A-Z]{12}');
INSERT INTO `countries`(`code`, `reg`) VALUES('SA', '[0-9]{2}[0-9A-Z]{18}');
INSERT INTO `countries`(`code`, `reg`) VALUES('RS', '[0-9]{18}');
INSERT INTO `countries`(`code`, `reg`) VALUES('SK', '[0-9]{20}');
INSERT INTO `countries`(`code`, `reg`) VALUES('SI', '[0-9]{15}');
INSERT INTO `countries`(`code`, `reg`) VALUES('ES', '[0-9]{20}');
INSERT INTO `countries`(`code`, `reg`) VALUES('SE', '[0-9]{20}');
INSERT INTO `countries`(`code`, `reg`) VALUES('CH', '[0-9]{5}[0-9A-Z]{12}');
INSERT INTO `countries`(`code`, `reg`) VALUES('TN', '[0-9]{20}');
INSERT INTO `countries`(`code`, `reg`) VALUES('TR', '[0-9]{5}[0-9A-Z]{17}');
INSERT INTO `countries`(`code`, `reg`) VALUES('AE', '[0-9]{19}');
INSERT INTO `countries`(`code`, `reg`) VALUES('GB', '[A-Z]{4}[0-9]{14}');
SET iban = REPLACE(iban, ' ', '');
SET pays = SUBSTRING(iban, 1, 2);
SET t = (SELECT `reg` from countries WHERE `code` = pays);
IF iban REGEXP t THEN
SET iso = CONCAT(substr(iban, 5), substr(iban, 1, 2), substr(iban, 3, 2));
-- Remplacer chaque caractère par sa valeur
SET iso = REPLACE(iso, 'F', '15');
SET iso = REPLACE(iso, 'R', '27');
SET iso = REPLACE(iso, 'M', '22');
SET II = iso;
RETURN II MOD 97;
END IF;
RETURN FALSE;
END |