Проблема с использованием суррогатного числа, которое не проходит тест алгоритма Луна, состоит в том, что когда вы собираетесь заменить реальную PAN суррогатом в одном из любого числа хост-приложений, сами эти приложения имеют некоторую логику, которая может принимать / отклонить суррогатное или вызвать поведение, основанное на атрибутах суррогатного.
Например, если начальная цифра (и) не соответствует соответствующему типу карты (4 = виза, 37 = AMEX, 6011 = обнаружить и т. Д.) Многие системы электронной торговли и выставления счетов также проводят быструю семантическую проверку с использованием Алгоритм Луна. Если я передам им суррогат, который не проходит этот тест, то он может быть отклонен. Наконец, хотя они не хотят хранить исходную PAN по причинам PCI DSS, они обычно хотят последние 4 цифры из соображений обслуживания клиентов.
Я приму ваши мысли под совет; в идеале, я бы предпочел создавать суррогаты, которые НЕ проходят тест MOD 10, так как это легче защитить, но я должен знать о потребностях поставщика клиента.
Что касается самого алгоритма Луна, я рассмотрел детали этого алгоритма, а также алгоритм Грэма Митчелла для генерации Луна, пропускающего «поддельные» числа. Однако его алгоритм не ограничен - он не начинается с 1-й цифры и последних 4-х фиксированных, тем более что последняя цифра сама является контрольной суммой.