Validate the check digit of an ISBN-13 code
/* Validate the check digit of an ISBN-13 code:
Multiply every other digit by 3.
Add the digits together.
Take the remainder of division by 10.
If it is 0, the ISBN-13 check digit is correct.
from RosettaCode */
fn check_isbn(isbn: &str) -> bool {
if isbn.chars().filter(|c| c.is_digit(10)).count() != 13 {
return false;
}
let checksum = isbn.chars().filter_map(|c| c.to_digit(10))
.zip([1, 3].iter().cycle())
.fold(0, |acc, (val, fac)| acc + val * fac);
checksum % 10 == 0
}
fn main() {
let isbns = ["978-1734314502", "978-1734314509", "978-1788399081", "978-1788399083"];
isbns.iter().for_each(|isbn| println!("{}: {}", isbn, check_isbn(isbn)));
}
3.78
9
# Validate the check digit of an ISBN-13 code:
# Multiply every other digit by 3.
# Add the digits together.
# Take the remainder of division by 10.
# If it is 0, the ISBN-13 check digit is correct.
# from RosettaCode
def validISBN13?(str)
cleaned = str.delete("^0-9").chars
return false unless cleaned.size == 13
cleaned.each_slice(2).sum{|d1, d2| d1.to_i + 3*d2.to_i }.remainder(10) == 0
end
isbns = ["978-1734314502", "978-1734314509", "978-1788399081", "978-1788399083"]
isbns.each{|isbn| puts "#{isbn}: #{validISBN13?(isbn)}" }
Thank you!
9
0
3.38
8
/* Validate the check digit of an ISBN-13 code:
Multiply every other digit by 3.
Add the digits together.
Take the remainder of division by 10.
If it is 0, the ISBN-13 check digit is correct.
from RosettaCode */
#include <stdio.h>
int check_isbn13(const char *isbn) {
int ch = *isbn, count = 0, sum = 0;
for ( ; ch != 0; ch = *++isbn, ++count) {
if (ch == ' ' || ch == '-') {
--count;
continue;
}
if (ch < '0' || ch > '9') return 0;
if (count & 1) {
sum += 3 * (ch - '0');
} else {
sum += ch - '0';
}
}
if (count != 13) return 0;
return !(sum%10);
}
int main() {
int i;
const char* isbns[] = {"978-1734314502", "978-1734314509", "978-1788399081", "978-1788399083"};
for (i = 0; i < 4; ++i) {
printf("%s: %s\n", isbns[i], check_isbn13(isbns[i]) ? "good" : "bad");
}
return 0;
}
Thank you!
8
0
Are there any code examples left?
New code examples in category Rust
-
Rust 2022-03-27 22:00:04 rust print i8
-
Rust 2022-03-27 14:15:02 rust check if key in hashmap
-
Rust 2022-03-22 13:45:18 rust convert a string (with decimals) to a floating point number.
-
Rust 2022-03-11 20:00:15 creating constants in rust
-
Rust 2022-03-07 01:55:02 hello world in rust
-
Rust 2022-03-03 20:10:04 levenshtein distance
-
Rust 2022-02-24 12:40:24 execution duration
-
Rust 2022-02-20 05:45:02 matching in rust
-
Rust 2022-02-19 17:35:12 rust bitset stack
-
Rust 2022-01-30 18:30:40 rust compile and run