algorithm11 function
bool
algorithm11(
- String initialDigits,
- String verificationDigitString,
- TypeIdentification typeIdentification
Validates a number using the "modulo 11" algorithm, used for Ecuadorian RUC numbers.
initialDigits
The initial digits of the RUC number.
verificationDigitString
The verification digit to validate.
typeIdentification
The type of identification being validated.
Returns true if the verification digit is valid.
Throws an IdentificationException if the verification digit is invalid, the identification type is not supported, or if any part of the identification is not a number.
Implementation
bool algorithm11(
String initialDigits,
String verificationDigitString,
TypeIdentification typeIdentification,
) {
final coefficients = listCoefficients[typeIdentification];
if (coefficients == null) {
throw IdentificationException(
ErrorCode.invalidType,
'Invalid identification type',
);
}
final verificationDigit = int.tryParse(verificationDigitString);
if (verificationDigit == null) {
throw IdentificationException(
ErrorCode.invalidVerificationDigit,
'Invalid verification digit: must be a number.',
);
}
final listDigits = initialDigits.split('').map((e) => int.parse(e)).toList();
if (listDigits.length != coefficients.length) {
throw IdentificationException(
ErrorCode.invalidType,
'Invalid identification type',
);
}
int total = 0;
for (int i = 0; i < listDigits.length; i++) {
total += listDigits[i] * coefficients[i];
}
final remainder = total % 11;
final result = remainder == 0 ? 0 : 11 - remainder;
if (result != verificationDigit) {
throw IdentificationException(
ErrorCode.invalidVerificationDigit,
'Invalid verification digit.',
);
}
return true;
}