isn. Типы данных для международных стандартов нумерации товаров#

В исходном дистрибутиве установлено по умолчанию: нет.

Связанные компоненты: отсутствуют.

Схема размещения: ext.

Модуль предоставляет типы данных для международных стандартов нумерации товаров:

Тип данных

Описание

Вывод в формате

EAN13

European Article Number, Европейский номер товара

Всегда в EAN13

ISBN13

International Standard Book Number, Международный стандартный книжный номер

Новый EAN13

ISMN13

International Standard Music Number, Международный стандартный музыкальный номер

Новый EAN13

ISSN13

International Standard Serial Number, Международный стандартный серийный номер

Новый EAN13

ISBN

Международный стандартный книжный номер

Старый короткий формат

ISMN

Международный стандартный музыкальный номер

Старый короткий формат

ISSN

Международный стандартный серийный номер

Старый короткий формат

UPC

Universal Product Code, Универсальный код товара

Внутри все типы представляются одинаково (64-битными целыми числами), и все они взаимозаменяемы. Различные типы введены для управления форматированием при выводе и для строгой проверки правильности ввода, что и определяет конкретный тип номера.

Номера проверяются на входе согласно жестко заданному списку префиксов: этот список префиксов также применяется для группирования цифр при выводе.

Модуль isn предоставляет следующие пары приведений типов:

Приведения

типов

ISBN13

<=>

EAN13

SMN13

<=>

EAN13

ISSN13

<=>

EAN13

ISBN

<=>

EAN13

ISMN

<=>

EAN13

ISSN

<=>

EAN13

UPC

<=>

EAN13

ISBN

<=>

ISBN13

ISMN

<=>

ISMN13

ISSN

<=>

ISSN13

Модуль включает в себя стандартные операторы сравнения плюс поддержку индексов по хешу и B-деревьев для этих типов данных.

Реализуемые функции:

Функция

Входные параметры

Возвращаемое значение

Описание

isn_weak

boolean

boolean

Устанавливает облегченный режим проверки ввода и возвращает новое состояние

isn_weak

boolean

Возвращает текущее состояние облегченного режима ввода

make_valid

isn

isn

Исправляет неверный номер на верный (сбрасывает флаг ошибки)

is_valid

isn

boolean

Проверяет наличие флага ошибки

Примечание:

Облегченный режим проверки номера позволяет вставлять в таблицу неверные значения номеров. Под неверным значением понимается номер, в котором не соответствует проверочная цифра («ключ»), а не полное отсутствие номера.

При попытке вставить в таблицу неверный номер в облегченном режиме проверки номер будет вставлен с исправленной проверочной цифрой, но выводиться будет с восклицательным знаком (!) в конце (например, 0-11-000322-5!). Этот признак ошибки можно проверить с помощью функции is_valid и очистить функцией make_valid.

При вводе номера вместо проверочной цифры можно указать ? и нужная проверочная цифра будет вставлена автоматически.

Доработка#

Доработка не проводилась.

Ограничения#

Ограничения отсутствуют.

Установка#

Модуль считается «доверенным», поэтому его могут устанавливать пользователи, имеющие право CREATE в текущей базе данных:

CREATE EXTENSION isn SCHEMA ext;

Настройка#

Настройка не требуется.

Использование модуля#

Прямое использование типов#

  • isbn

    SELECT isbn('978-0-393-04002-9');
    

    Пример вывода результата:

       isbn      
    ---------------
     0-393-04002-X
    (1 row)
    
  • isbn13

    SELECT isbn13('0901690546');
    

    Пример вывода результата:

          isbn13       
    -------------------
     978-0-901690-54-8
    (1 row)
    
  • issn

    SELECT issn('1436-4522');
    

    Пример вывода результата:

       issn    
    -----------
     1436-4522
    (1 row)
    

Приведение типов#

Номер EAN13 можно привести к другому типу при условии, что этот номер будет допустимым для целевого типа.

  • недопустимое приведение типов:

    SELECT isbn(ean13('0220356483481'));
    

    Пример вывода ошибки приведения:

    ERROR:  cannot cast EAN13(UPC) to ISBN for number: "0220356483481"
    
  • приведение EAN13 к другому типу:

    SELECT upc(ean13('0220356483481'));
    

    Пример вывода результата:

         upc      
    --------------
     220356483481
    (1 row)
    
  • приведение другого типа к EAN13:

    SELECT ean13(upc('220356483481'));
    

    Пример вывода результата:

          ean13      
    -----------------
     022-035648348-1
    (1 row)
    
  • создание таблицы с одним столбцом с типом данных ISBN, добавим тестовые данные и проверим результат:

    CREATE TABLE test_isn (id isbn);
    INSERT INTO test_isn VALUES('9780393040029');
    SELECT * FROM test_isn;
    

    Пример вывода результата:

          id       
    ---------------
     0-393-04002-X
    (1 row)
    

Автоматическое вычисление проверочных цифр#

  • используем знак ? для вставки в таблицу:

    INSERT INTO test_isn VALUES('220500896?');
    INSERT INTO test_isn VALUES('978055215372?');
    

    Пример результата:

          id       
    ---------------
     0-393-04002-X
     2-205-00896-X
     0-552-15372-9
    (3 rows)
    
  • используем знак ? для вызова функций:

    SELECT issn('3251231?');
    SELECT ismn('979047213542?');
    

    Пример вывода результата:

       issn    
    -----------
     3251-2317
    (1 row)
    
         ismn      
    ---------------
     M-47213-542-3
    (1 row)
    

Использование ослабленного режима#

Установка ослабленного режима, вставка данных и возврат режима в прежний статус:

SELECT isn_weak(true);
INSERT INTO test_isn VALUES('978-0-11-000533-4');
INSERT INTO test_isn VALUES('9780141219307');
INSERT INTO test_isn VALUES('2-205-00876-X');
SELECT isn_weak(false);

Проверка результата:

SELECT id FROM test_isn WHERE NOT is_valid(id);

Пример вывода результата:

       id       
----------------
 0-11-000533-3!
 0-14-121930-0!
 2-205-00876-5!
(3 rows)

Сброс признака ошибки номера:

UPDATE test_isn SET id = make_valid(id) WHERE id = '2-205-00876-X!';

Проверка результата сброса:

SELECT * FROM test_isn;

Пример вывода результата:

       id       
----------------
 0-11-000533-3!
 0-14-121930-0!
 2-205-00876-5
(3 rows)

Вывод номеров ISBN13 из таблицы:

SELECT isbn13(id) FROM test_isn;

Пример вывода результата:

       isbn13       
--------------------
 978-0-11-000533-1!
 978-0-14-121930-1!
 978-2-205-00876-0
(3 rows)

Ссылки на документацию разработчика#

Исходная документация PosgreSQL по модулю isn: https://www.postgresql.org/docs/15/isn.html.