Алгоритм проверки ОКПО и других номеров статистики


Продолжая тему расчёта контрольных сумм для регистрационных номеров, рассмотрим проверку номеров из органов статистики на примере ОКПО. Алгоритм проверки ОКПО и других номеров статистики довольно прост. Как и в случае с другими номерами, последняя цифра в номере является контрольной. Алгоритм проверки ОКПО разбивается на несколько простых этапов:
  • каждому разряду в номере до крайнего правого присваивается значение, соответствующее порядковому номеру. Если порядковый номер больше 10 - отсчёт снова начинается с начального значения;
  • каждая цифра в номере перемножается с соответствующим коэффициентом;
  • подсчитывается сумма;
  • ищется остаток от деления на 11 - остаток должен быть равен последней цифре в номере.
В случае, когда остаток от деления равен 10, придётся проделать всё заново, но сдвинуть точку отсчёта порядковых номеров на 2. То есть у первого разряда коэффициент будет равен 3, у второго 4 и т.д., но при этом крайним значением также будет 10. Например, для номеров длиной в 10 символов будет ряд 3, 4, ... 10, 1, 2. Если после повторения всех операций со сдвигом остаток снова равен 10 - контрольное число сравнивают с нулём. Хорошее описание алгоритма проверки ОКПО или проверки ОКАТО с примерами можно найти на Википедии. Алгоритм проверки ОКПО не сложен и в реализации. В качестве примера можно рассмотреть код на python:
def check_okpo(okpo):
	def okpo_csum(stat_req, step=0):
		pairs = [(i, int(x)) for i, x in (list(enumerate(stat_req[:10 - step], 1 + step)) + list(enumerate(stat_req[10 - step:], 1)))]
		return sum([k * v for k, v in pairs[:-1]])

	cval = okpo_csum(okpo) % 11
	if cval == 10:
		cval = okpo_csum(okpo, step=2) % 11
		if cval == 10:
			cval = 0

	return cval == int(okpo[-1])
Во внутренней функции okpo_csum() подсчитывается контрольное число. В переменной k хранится список используемых коэффициентов. Вторая часть с разностью нужна для случаев, когда длина номера превышает 10 символов). Переменная step отражает сдвиг для коэффициентов. Важно отметить, что в случае с ОКПО номер для ЮЛ должен состоять из 8 цифр, а для ИП из 10. Поэтому перед проверкой номера не забывайте добавлять лидирующие нули. Например, ОКПО ИП - 148543122, а для проверки номера нужно передавать 0148543122. Алгоритм проверки ОКПО так же прост, как и проверка ИНН или проверка ОГРН. Стоит так же учесть, что подобным образом проверяется не только ОКПО, но и другие коды статистики.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.