Перейти к основному содержимому

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

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

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

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

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

Тип данныхОписаниеВывод в формате
EAN13European Article Number, Европейский номер товараВсегда в EAN13
ISBN13International Standard Book Number, Международный стандартный книжный номерНовый EAN13
ISMN13International Standard Music Number, Международный стандартный музыкальный номерНовый EAN13
ISSN13International Standard Serial Number, Международный стандартный серийный номерНовый EAN13
ISBNМеждународный стандартный книжный номерСтарый короткий формат
ISMNМеждународный стандартный музыкальный номерСтарый короткий формат
ISSNМеждународный стандартный серийный номерСтарый короткий формат
UPCUniversal 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_weakbooleanbooleanУстанавливает облегченный режим проверки ввода и возвращает новое состояние
isn_weakbooleanВозвращает текущее состояние облегченного режима ввода
make_validisnisnИсправляет неверный номер на верный (сбрасывает флаг ошибки)
is_validisnbooleanПроверяет наличие флага ошибки

Примечание:

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

При попытке вставить в таблицу неверный номер в облегченном режиме проверки номер будет вставлен с исправленной проверочной цифрой, но выводиться будет с восклицательным знаком (!) в конце (например, 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.