Часто буває потрібно провести валідацію ЄДРПОУ коду при реєстрації чи в якихось інших процесах, що потребують такого роду перевірку данних. Є "типу" безкоштовний державний ресурс, але не API (хоча, за законом, мало бути безкоштовним якраз API). Там HTML форма з Google Captcha і для інтеграції вона абсолютно не підходить.

В одному проекті ми вирішили цю задачу за допомогою PostgREST бази даних. Публічна, безкоштовна REST API знаходиться тут, останнє оновлення - грудень 2018 року. В рамках наших потреб, ми використовуємо наступні endpoints:

1. https://api.hlv-ua.pro/uo?code=eq.{edrpou}
{edrpou} - замінюємо на код ЕДРПОУ огранізації

2. https://api.hlv-ua.pro/fop?code=ilike.*{fio}*
{fio} - замінюємо на ПІБ приватного підприємця (пошуку по ІНН, нажаль поки немає)

Ну і щоб додатково зменшити навантаження на api, проводьте попередню валідацію на фронтенді чи бекенді Вашого сервісу/сайту.

Приклад валідатора по чексуммі ЕДРПОУ для Django:

def check_sum_edrpou(value, coefficients):
    def get_mod(val, add=0):
        total = 0
        for ind, l in enumerate(val):
            d = int(l)
            total += d * (coefficients[ind] + add)
        return divmod(total, 11)

chars = str(value)
length = len(chars)
div, mod = get_mod(chars[:length - 1])
if mod >= 10:
    div, mod = get_mod(chars[:length - 1], 2)
if mod < 10:
    return mod == int(value[-1])
return False


def validate_edrpou(value):
"""
Validate code with official formula by checking control sum.
Inspired from: http://1cinfo.com.ua/Articles/Proverka_koda_po_EDRPOU.aspx

:param value: can be string or integer, other not tested
:return bool: if edrpou code is valid return True or False when not
"""

coef_table_1 = [1, 2, 3, 4, 5, 6, 7]
coef_table_2 = [7, 1, 2, 3, 4, 5, 6]
edrpou = int(value)
coef = coef_table_1 if edrpou < 30000000 or edrpou > 60000000 else coef_table_2

if not check_sum_edrpou(value, coef):
    raise ValidationError(
        _('%(value)s control sum error. Its look like wrong edrpou'),
        params={'value': value},
    )