ñòàòüèGNU Free Documentation License ìàòåðèàëû âçÿòû èç Âèêèïåäèè Ñòàòüÿ áûëà èçìåíåíà. Îðèãèíàë ñòàòüè.

Ìåæäóíàðîäíûé èäåíòèôèêàöèîííûé êîä öåííîé áóìàãè

Ìàòåðèàë èç Ýíöèêëîïåäèè â ñâîáîäíîé ýíöèêëîïåäèè
Ïåðåéòè ê: íàâèãàöèÿ, ïîèñê

Ìåæäóíàðîäíûé èäåíòèôèêàöèîííûé êîä öåííîé áóìàãè (àíãë. 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.

[ïðàâèòü] Ñì. òàêæå

[ïðàâèòü] Ññûëêè


Ïðîñòðàíñòâà èì¸í

Âàðèàíòû
Ïðîñìîòðû
Äåéñòâèÿ