Answers for "check digit of isbn"

0

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)));
}
Posted by: Guest on May-31-2021
0

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 */

#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;
}
Posted by: Guest on May-31-2021

Browse Popular Code Answers by Language