Международный идентификационный код ценной бумаги

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

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

[править] См. также

[править] Ссылки

Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Участие
Печать/экспорт
Инструменты
На других языках