Международный идентификационный код ценной бумаги
Международный идентификационный код ценной бумаги (англ. International Securities Identification Number, общепринятое сокращение — ISIN) — 12-разрядный буквенно-цифровой код, однозначно идентифицирующий ценную бумагу. ISIN присваивается следующим финансовым инструментам:
| Структура ISIN | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | |
| Код страны |
NSIN | Контр. цифра |
||||||||||
Структура ISIN-кода определяется стандартом ISO 6166. Первые два символа — буквы, определяющие код страны эмитента согласно стандарту ISO 3166-1 (российские ISIN-коды начинаются буквами RU). Далее следуют 9 букв и цифр национального идентификационного кода ценной бумаги (англ. National Securities Identifying Number, NSIN). Завершает код контрольная цифра.
ISIN-код присваивается национальными нумерующими агентствами (англ. National numbering agency, NNA).
Содержание |
[править] Методология расчёта ISIN
[править] PL/SQL функция проверки корректности кода ISIN
источник - СофтВел (www.softwell.ru)
CREATE OR REPLACE FUNCTION f_isin_check (isin_code VARCHAR2)
RETURN INTEGER
-- проверка ISIN кода:
-- 0 - правильный код
-- -1 - неправильный формат (надо 2 буквы + 9 букв/цифр + 1 цифра)
-- >0 - неправильная контрольная сумма
AS
visin_code VARCHAR (40); -- исин код
digit_code VARCHAR (80); -- цифровое представление исин кода
control_summ INT; -- контрольная сумма
p VARCHAR (1); -- текущий символ
t INT; -- текущая цифра
i INT; -- индекс
BEGIN
-- форматируем все буквы в заглавные
visin_code := UPPER (isin_code);
-- проверка длины
IF ( (LENGTH (visin_code) <> 12) OR (visin_code IS NULL))
THEN
RETURN -1;
END IF;
-- проверка формата
IF ( (SUBSTR (visin_code, 1, 1) < 'A')
OR (SUBSTR (visin_code, 1, 1) > 'Z')
OR (SUBSTR (visin_code, 2, 1) < 'A')
OR (SUBSTR (visin_code, 2, 1) > 'Z')
OR (SUBSTR (visin_code, 12, 1) < '0')
OR (SUBSTR (visin_code, 12, 1) > '9'))
THEN
RETURN -1;
END IF;
-- превращаем буквы в цифры
digit_code := '';
FOR i IN 1 .. LENGTH (visin_code)
LOOP
p := SUBSTR (visin_code, i, 1);
IF ( (p >= '0') AND (p <= '9'))
THEN
digit_code := digit_code || p;
ELSIF ( (p >= 'A') AND (p <= 'Z'))
THEN
-- A -> 10, B -> 11, ... , Z -> 35
digit_code := digit_code || LTRIM (TO_CHAR (ASCII (p) - 55, '99'));
ELSE
RETURN -1;
END IF;
END LOOP;
-- расчет контрольной суммы --
control_summ := 0;
FOR i IN 1 .. LENGTH (digit_code)
LOOP
t := ASCII (SUBSTR (digit_code, i)) - 48;
t := t * (MOD (LENGTH (digit_code) - i, 2) + 1);
IF (t > 9)
THEN
t := t - 9;
END IF;
control_summ := control_summ + t;
END LOOP;
-- выводим остаток от деления контрольной суммы на 10
-- у правильных ISIN кодов этот остаток равен 0
RETURN MOD (control_summ, 10);
END f_isin_check
[править] Пример
ISIN акции Газпрома номиналом 5 руб. RU0007661625.
[править] См. также
[править] Ссылки
- Официальный сайт Российского Национального Нумерующего Агентства
- Официальный сайт Ассоциации Национальных Агентств по Нумерации (на английском)
| Это заготовка статьи по финансам. Вы можете помочь проекту, исправив и дополнив её. |