Онтология и примеры анализа кодов и идентификаторов

Почти год назад я писал на эту  тему в заметке Систематизация расшифровки кодов и управления справочниками, а сейчас продолжу приостановленные тогда размышления.

Если вкратце, то основной постулат такой — подавляющее число маркирующих кодов и уникальных идентификаторов создаются по ограниченному числу правил и подлежат разложению на ряд признаков позволяющих связывать эти коды с другими информационными массивами и справочниками, а также на их основе извлекать больше информации об исследуемых/анализируемых объектах.

Но, вернёмся к кодам — что это такое и как они есть. Буду приводить примеры:

  • 049205770 — пример кода БИК — банковского идентификационного кода
  • 02.03.1989 — пример записи даты в формате dd.mm.yyyy, где dd — день, mm — месяц, yyyy — год от рождества Христова
  • ru.wikipedia.org — пример кодирования адреса в виде домена
  • 09808117 — пример кода ОКПО,  общероссийского классификатора предприятий и организаций
  • 5460000016 — пример кода ИНН. Идентификационного номера налогоплательщика
  • 65.12, 65.22.5 — примеры кодов ОКВЭД
  • 30401810701200001022 — пример кода корреспондентского счета банка в ЦБ РФ
  • ALMZRU8Y — пример кода S.W.I.F.T используемого банковскими организациями
  • ГОСТ Р 52980-2008 — пример кода в виде документа ГОСТ
  • 454091 — российский почтовый индекс
  • 359 — код по общероссийскому классификатору единиц измерения (ОКЕИ) означающий «сутки».
  • NO93 8601 1117 947 — международный номер банковского счета, в примере номер счета в банке Норвегии
  • 13001 — код правительства Российской Федерации по справочнику ОКОГУ
  • 1021600000256 — пример общероссийского государственного регистрационного номера, ОГРН, присваеваемого юридическим лицам.
  • ГС-1-50-02-26-0-7709342342-013097-1 — пример номера лицензии на проектирование зданий и сооружений
  • 08050 — код улицы «Зелёный проспект» по общемосковскому классификатору улиц

плюс сюда же можно добавить такие коды как: номера банковских карт, автомобильные коды VIN, телефонные номера, коды ISBN, MAC адреса сетевых карт, IP адреса, коды EAN-8, EAN-13, GS-128, DUNS номера организаций в США и многие и многие другие.

Суть же всегда одна — кодирование информации об объектах, это способ решения следующих задач:

  • сопоставление объекта некой информационной записи о нём содержащей подробную информацию о его характеристиках, особенностях и атрибутах
  • предоставление людям и программным средствам информацию об атрибутах данного объекта.

При этом я пока затрагиваю только вопросы кодирования информации в текста, но есть и другие способы в виде баркодов, знаков, аудиосигналов.

Анализ примеров

Код ИНН 5460000016

Структурно код ИНН состоит из:

— 4 цифры — код налоговой инспекции по справочнику СОУН: 5460 (Межрайонная инспекция по крупнейшим налогоплательщикам Новосибирской области)

— 5 цифр — порядковый номер регистрации организации в инспекции: 00001

— 1 цифра проверочный код: 6 (код верен)

Что ещё мы знаем об этом коде? Далее по наблюдениям:

1. Коды инспекций в справочнике СОУН состоят из 4-х цифр, две первых из которых — это код региона инспекции или же код 99 для крупнейших налогоплательщиков. Но, при указании кодов, код 99 используется для другого налогового кода КПП — поэтому для ИНН мы можем говорить о 100% привязке кода СОУН к определённому региону что закодировано в первых двух его цифрах. Отсюда код ИНН позволяет всегда определить регион местонахождения организации

2. Код ИНН всегда состоит из 10 символов цифр для юридических лиц и 12 символов цифр для физ. лиц. Что означает что код обладает фиксированной длиной.

3. Присвоение порядкового номера производится инкрементально, отсюда зная даты присвоения нескольких номеров можно с высокой вероятностью предсказывать дату его присвоения. Фактически инспекция — это генератор последовательно прирастающих значений и то же правило работает и со всеми остальными кодами в которых можно отделить прирастающую часть от идентификационной.

4. Все части кода ИНН обладают фиксированной длиной, отсутствуют случаи когда они могут перекрываться.

5. Код не содержит иерархии, а только ссылки на другие справочники.

6. Код является совершенным, а то есть — в нём отсутствуют неидентифицированные части и раскрываемым, а то есть все части кода являющиеся ссылками на внешние справочники (регионы и справочник СОУН) существуют и доступны.

7. Код является идентификатором в реестре юридических лиц ЕГРЮЛ где и содержится более подробная информация об идентифицируемом им объекте — организации.

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

Другой пример код S.W.I.F.T: ALMZRU8Y

Код S.W.I.F.T состоит из следующих частей:

— 4 символа — уникальный код организации: ALMZ (АлмазЭргиЭнБанк)

— 2 символа — код страны по ISO 3166-1 alpha-2: RU (Россия)

— 2 символа — код местонахождения организации: 8Y (г. Якутск)

При наличии филиалов код SWIFT может включать дополнительные 3 символа идентифицирующие его филиал. Например, UBSWUS33CHI, где CHI это признак филиала в городе Чикаго.

Что можно сказать об этом коде?:

1. Код можно рассматривать как один код с переменной длиной в 8 и 11 символов, так и как два кода — полный в 11 символов и короткий в 8 символов.

2. Код является совершенным, но не раскрываемым. Несмотря на то что все части кода предопределены, не все справочники известны. В частности справочники кодов местонахождения свои для каждой страны и неизвестны в открытом доступе, равно как и справочники идентификации филиалов

3. Поскольку коды местонахождения уникальны только в пределах страны, а то есть кода страны, то для сведения местонахождений в единый справочник правильная полная запись кода местонахождения должна включать оба этих кода. В нашем случае это RU8Y, одновременно с этим, учитывая что глобального всемирного справочника регионов, городов и муниципальных образований не существует и их заменяют региональные государственные справочники, можно говорить о множественности справочников и определения типа ссылки на основании кода страны.

4. Код не содержит кода проверки и допускает опечатки и неточности.

5. Код является ссылкой на идентификатор в базе международной организации SWIFT где содержится более подробная информации об участнике этой системы.

6. Код не содержит признаков иерархии объектов.

Итого: код содержит минимальную базовую информацию и является ссылкой на идентификатор в базе.

Рассмотрим далее, код почтового индекса — 454091

— 6 цифр — это идентификатор почтового отделения в базе почтовой службы.

Что можно о нём сказать:

1. Код является несовершенным, поскольку для понимания принципов его кодирования требуется детальный анализ имеющихся

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

3. Код не содержит признаков иерархии объектов.

4. Код и его отдельные части обладают фиксированной длиной.

Код ОКЕИ — 359

3 цифры — уникальный идентификатор единицы измерений по справочнику ОКЕИ, в нашем случае этот код означает единицу измерений «сутки»

Что можно сказать о коде:

1. Код и его части обладают фиксированной длиной

2. Код является совершенным — он состоит из лишь одной части которая является лишь идентификатором.

3. Код не содержит каких-либо дополнительных признаков и ссылок, являсь лишь ссылкой на запись в реестре справочника.

Итого: это пример предельно простого кода не содержащего информации и лишь являющегося ссылкой.

Подробнее о коде ОКЕИ можно почитать и их посмотреть тут http://www.mosclassific.ru/mClass/okei_view.php

Код ОКВЭД — 65.22.1 (предоставление потребительского кредита)

Структура кода ОКВЭД: XX.XX.XX при этом код обладает нефиксированной длиной и может быть записан в формах: XX.X, XX.XX, XX.XX.X и XX.XX.XX

Что можно сказать о кодах ОКВЭД:

1. Справочник ОКВЭД является иерархическим и это вложено в его коды. Первые две цифры определяют группу, следующие остальные иерархии подгрупп.

2. Длина кода ОКВЭД колеблется от 4 до 8 символов разбитых на группы по 2 символа цифры разделённых точками.

3. Коды ОКВЭД являются совершенными и раскрываемыми, но не содержат информации о ссылках на внешние данные. Вместо этого они ссылаются на вышестоящие коды в иерархии.

4. По коду ОКВЭД можно получить дополнительную информацию из общедоступного справочника кодов которая включает его название и категорию.

Итого: код ОКВЭД — это пример кода классификатора, когда основной дополнительной информацией которая извлекается это расшифровка его названия. В то же время, сам код не содержит прямых ссылок на другие справочники и объекты

Код IBAN и пример в виде:  NO93 8601 1117 947

Структура кода IBAN является нефиксированной и зависит от первых двух символов после его идентификатора. Например, для NO длина кода составляет 15 символов и обладает следующей структурой:

— 2 символа — идентификатор страны

— 2 символа — два знака контрольного числа

— 4 символа — код банка

— 6 символов — код счета

— 1 символ — дополнительное контрольное число

При этом, для других стран длина и структура кода будет отличаться. Подробнее о IBAN можно почитать тут  http://en.wikipedia.org/wiki/International_Bank_Account_Number

В итоге что можно сказать о коде:

1. Код является совершенным, но не полностью раскрываемым поскольку коды банков в кодах IBAN ведутся центробанками отдельных стран в виде отдельных справочников не все из которых доступны.

2. Код является нечётким — это означает что его длина и/или структура зависит от содержимого и требует дополнительных правил интерпретации и/или ведения справочника структурных схем

3. Код обладает множественными ссылками — на справочник стран, на справочники банков в странах, на справочники типов счетов для некоторых стран и так далее.

4. Учитывая нечёткость кода и наличие множественных ссылок на зависящих от содержимого — можно разделять коды IBAN для стран как независимые справочки наследующие общие подходы от некого мета-класса.

Примечание: в принципе, IBAN — это пример одного из наиболее неприятных видов кодов, поскольку детализация и интерпретация зависят от его содержимого и требуются дополнительные усилия на описания структуры кодов в едином формате.

Рассмотрим код даты в виде записи 02.03.1989

Об этом коде немного свободным текстом без тезисов.

Почему вообще дата и почему в таком формате? Этот формат даты  dd.mm.yyyy, является не более чем примеров, разумеется этих форматов множество. Факт же в том что записывая дату мы тем самым кодируем данные о временном отрезке длительностью в 24 часа в виде текста. Формат позволяет определить из описания: день, месяц и год. Все три числа — это ссылки на справочники: дней в месяце, месяцев в году и годов. Одновременно с этим значения дня и месяца вместе являются проверочными для определения корректности написания из-за разницы числа дней в месяце, а комбинация дня, месяца и года — проверочной комбинацией для високосных годов.

Это кодирование даты, по сути, является не кодом, а форматом — главное отличие которого от кода в множественности форм представления эталонной информации. Например, также дату можно представить в видах: 02 марта 1989, 62.1989 (день от начала года плюс год), 1989-03-02 и так далее, всего форматов десятки. Одной из особенностью и отличием форматов от кодов является возможность приведения к эталонному значению которое может быть приведено к одному из форматов и заведомо содержит все те признаки что и любой из его форматов.

Итоги и выводы

Остальные коды я не буду расшифровывать сейчас, там схожие принципы и подходы, сейчас же о сведении всего вышенаписанного воедино:

1. Коды можно делить на совершенные и несовершенные — по наличию неидентифицированных частей

2. Коды могут быть раскрываемым и нераскрываемыми — в зависимости от доступности справочников на которые ссылаются отдельные его части и сам код.

3. Коды бывают четкими и нечёткими — по зависимости их структуры и длины от отдельных признаков в коде.

4. Коды могут содержать перекрывающие друг друга части или части накладывающиеся друг на друга. Например, идентификация местонахождения банков в кодах SWIFT является уникальной с кодом страны.

5. Форматы простых данных — дат и чисел в некоторых случаях могут рассматриваться как коды.

В итоге можно говорить об онтологии кодирования — наборе базовых правил и их формальном описании для интерпретации и сопоставления информации скрытой в кодах.

Зачем это нужно?

Собственно, а зачем всё это нужно помимо простого любопытства?

Причин несколько:

1. Понимание и расшифровка кодов нужны при обогащении баз данных. Довольно часто возникает ситуация когда те или иные коды — о продуктах, об организациях или о документах были накоплены и одновременно необходимо к данным добавить дополнительные срезы для их анализа — в этом случае эта информация извлекается как из кодов, так и из внешних справочников и реестров на которые эти коды ссылаются.

2. Применение в различных алгоритмах извлечения информации — для её обогащения и классификации. Я лично делал уже несколько подобных алгоритмов которые на основе минимума доступной, но нужной информации собирали набор классификационных признаков.

3. Конкурентная разведка, следственные мероприятия и так далее. Например, проверка организаций по регистрационным кодам, проверка автомобилей по кодам VIN, определение банка по первым 4-5 цифрам банковской карты и так далее.

Лично я уже довольно долгое время такие коды собираю и пишу о них, как вот в этой заметке так и постах ранее которые идут под категорией расшифровка реальности

Ну а если Вы знаете какие-либо расшифровки интересных видов кодов или же наоборот ищете как расшифровать какие-либо Вам неизвестные  — отмечайтесь в комментариях.


About This Author

Яндекс.Метрика