Алгоритм Луна

RomanVG 160 1 8 5

Алгоритм используется, например, для вычисления контрольной цифры номера пластиковой карты, кода IMEI и т.п.

Функция ПроверитьНомерПоАлгоритмуЛуна(Номер) Экспорт
	
	// Удаляем все нецифровые символы из номера
	ОчищенныйНомер = СтрЗаменить(Номер, " ", "");
	ОчищенныйНомер = СтрЗаменить(ОчищенныйНомер, "-", "");
	ОчищенныйНомер = СтрЗаменить(ОчищенныйНомер, "/", "");
	
	// Проверяем, что номер не пустой и содержит только цифры
	Если ПустаяСтрока(ОчищенныйНомер) Тогда
		Возврат Ложь;
	КонецЕсли;
	
	Для Позиция = 1 По СтрДлина(ОчищенныйНомер) Цикл
		Символ = Сред(ОчищенныйНомер, Позиция, 1);
		Если Символ < "0" Или Символ > "9" Тогда
			Возврат Ложь;
		КонецЕсли;
	КонецЦикла;
	
	// Реализация алгоритма Луна
	Сумма = 0;
	Позиция = СтрДлина(ОчищенныйНомер);
	ЧетнаяПозиция = Ложь;

	Пока Позиция > 0 Цикл
	
		Цифра = Число(Сред(ОчищенныйНомер, Позиция, 1));
		
		Если ЧетнаяПозиция Тогда
			Цифра = Цифра * 2;
			Если Цифра > 9 Тогда
				Цифра = Цифра - 9;
			КонецЕсли;
		КонецЕсли;
		
		Сумма = Сумма + Цифра;
		ЧетнаяПозиция = Не ЧетнаяПозиция;
		Позиция = Позиция - 1;
	
	КонецЦикла;
	
	Возврат (Сумма % 10 = 0);
	
КонецФункции
0

См. также

КонтрольнаяСумма (БСП)

СтрокаВBase64 (БСП)

Подпись (БСП)

ПриЗагрузкеКлассификатора (БСП)

МенеджерКриптографииАлгоритмыУстановлены (БСП)

Алгоритм загрузки в документ "Корректировка регистров"

Реализовать возможность давать подсказки алгоритму определения типизации переменных.

ЭлементОтбораСвойствоАлгоритмЗначения (БСП)

ХешПолногоПутиКФорме (БСП)

Модератору