El algoritmo de Luhn es una opción muy pobre para esta aplicación. Está buscando aplicar un algoritmo fácilmente reversible para un propósito de seguridad.
El algoritmo de Luhn hace una cosa: verificar dígitos. El único propósito al que se debe aplicar es para una pequeña cantidad de verificación de entrada, específicamente para detectar errores tipográficos, como los dígitos faltantes o los dígitos intercambiados. También funciona para la validación de códigos de barras, como verificar las UPC o el Código 3 de 9 para garantizar que el lector de códigos de barras lea correctamente todas las franjas. Pero esos son los límites de lo que se debe confiar.
Por ejemplo, en su caso podría iterar desde "01212301-0" hasta "01212301-9" hasta que uno de ellos me otorgue el acceso. Solo tengo que intentar diez veces como máximo. Puedo hacer esto fácilmente a mano. El algoritmo de Luhn no puede proteger su sistema.
Para su uso en una aplicación de seguridad, probablemente requiera un esquema que utilice un hash criptográficamente seguro, como SHA-2. Por supuesto, ese tipo de cambio implica un gran cambio en su sistema: un algoritmo de Luhn genera un valor de 0 a 9, mientras que un hash criptográfico produce un resumen de 40 dígitos hexadecimales. Pero es probable que todo eso no sea relevante, porque sería mejor tener un sistema diseñado para realizar el control de acceso manejando esa responsabilidad. Un sistema como Active Directory o LDAP está diseñado exactamente para habilitar este tipo de funcionalidad de manera segura, y resuelve las inseguridades de su solución local.