Lt304888.ru

Туристические услуги

ISIN

23-10-2023

Международный идентификационный код ценной бумаги (англ. 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

-- используется в продуктах СофтВел (http://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.

См. также

Ссылки

  • Официальный сайт Российского Национального Нумерующего Агентства
  • Официальный сайт Ассоциации Национальных Агентств по Нумерации (на английском)


ISIN.

© 2020–2023 lt304888.ru, Россия, Волжский, ул. Больничная 49, +7 (8443) 85-29-01