Newer
Older
exercism-cpp / isbn-verifier / isbn_verifier.cpp
@Wook Song Wook Song on 15 Sep 2023 880 bytes Easy: Add a solution for "isbn-verifier"
#include "isbn_verifier.h"

#include <string>

namespace isbn_verifier {
    bool is_valid(const std::string &isbn) {
        constexpr int64_t mul = 10;
        constexpr int64_t mod = 11;
        int64_t isbn_as_num = 0;
        size_t len = 0;
        int i = mul;

        for (const char &c : isbn) {
            int64_t v;

            if (c == '-')
                continue;

            len++;
            if (c == 'X') {
                if (len != 10)
                    return false;
                v = 10;
            } else {
                v = static_cast<int64_t>(c - '0');
            }

            isbn_as_num += (v * (i--));
        }

        if (len != 10 || (isbn_as_num % mod) != 0)
            return false;
        return true;
    }

    bool is_valid(const char *isbn) {
        return is_valid(std::string(isbn));
    }
}  // namespace isbn_verifier