36 lines
974 B
Plaintext
36 lines
974 B
Plaintext
fn damm(number: &str) -> u8 {
|
|
static TABLE: [[u8; 10]; 10] = [
|
|
[0, 3, 1, 7, 5, 9, 8, 6, 4, 2],
|
|
[7, 0, 9, 2, 1, 5, 4, 8, 6, 3],
|
|
[4, 2, 0, 6, 8, 7, 1, 3, 5, 9],
|
|
[1, 7, 5, 0, 9, 8, 3, 4, 2, 6],
|
|
[6, 1, 2, 3, 0, 4, 5, 9, 7, 8],
|
|
[3, 6, 7, 4, 2, 0, 9, 5, 8, 1],
|
|
[5, 8, 6, 9, 7, 2, 0, 1, 3, 4],
|
|
[8, 9, 4, 5, 3, 6, 2, 0, 1, 7],
|
|
[9, 4, 3, 8, 6, 1, 7, 2, 0, 5],
|
|
[2, 5, 8, 1, 4, 3, 6, 7, 9, 0],
|
|
];
|
|
|
|
number.chars().fold(0, |row, digit| {
|
|
let digit = digit.to_digit(10).unwrap();
|
|
TABLE[row as usize][digit as usize]
|
|
})
|
|
}
|
|
|
|
fn damm_validate(number: &str) -> bool {
|
|
damm(number) == 0
|
|
}
|
|
|
|
fn main() {
|
|
let numbers = &["5724", "5727", "112946"];
|
|
for number in numbers {
|
|
let is_valid = damm_validate(number);
|
|
if is_valid {
|
|
println!("{:>6} is valid", number);
|
|
} else {
|
|
println!("{:>6} is invalid", number);
|
|
}
|
|
}
|
|
}
|