ISBN-10 identifiers are ten digits long. The first nine characters are digits 0-9. The last digit can be 0-9 or X, to indicate a value of 10.
An ISBN-10 number is valid if the sum of the digits multiplied by their position modulo 11 equals zero.
For example:
ISBN : 1 1 1 2 2 2 3 3 3 9
position : 1 2 3 4 5 6 7 8 9 10
This is a valid ISBN, because:
(1*1 + 1*2 + 1*3 + 2*4 + 2*5 + 2*6 + 3*7 + 3*8 + 3*9 + 9*10) % 11 = 0
1112223339 --> true
111222333 --> false
1112223339X --> false
1234554321 --> true
1234512345 --> false
048665088X --> true
X123456788 --> false
# ISBN-10-Validation.jl
"""
解析每一位数字,'X'解析为10
"""
#> "解析每一位数字,'X'解析为10\n"
function parse_isbn(isbn::String)::Vector{Int8}
|> collect .|> x -> isdigit(x) ? parse(Int8, x) : 10
isbn end
#> parse_isbn (generic function with 1 method)
function isvalidISBN10(isbn::String)::Bool
= occursin(r"^\d{9}(\d|X)$", isbn)
form_check && return false
!form_check
= sum(parse_isbn(isbn) .* (1:10)) % 11 == 0
arithmetic_check return arithmetic_check
end
#> isvalidISBN10 (generic function with 1 method)
isvalidISBN10("1293")
#> false
isvalidISBN10("1112223339")
#> true
isvalidISBN10("1234512345")
#> false
isvalidISBN10("X123456788")
#> false