Часто буває потрібно провести валідацію ЄДРПОУ коду при реєстрації чи в якихось інших процесах, що потребують такого роду перевірку данних. Є "типу" безкоштовний державний ресурс, але не 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},
)