Sha256: 7330f01532a886da7a3776ff7072227fe84f3eda475b1881bc038c5264f46fce

Contents?: true

Size: 596 Bytes

Versions: 72

Compression:

Stored size: 596 Bytes

Contents

macro isbn_str(s)
    ISBN(s)
end

struct ISBN <: AbstractString
    s::AbstractString

    ISBN(s) = verify(s) ? new(replace(s, "-", "")) : throw(ArgumentError("invalid ISBN string: $s"))
end

string(s::ISBN) = s.s

function verify(s::AbstractString)
    s = replace(s, "-", "")
    chars = split(s, "")

    length(chars) == 10 || return false

    if last(chars) == "X"
        chars[end] = "10"
    end

    all(c -> all(isdigit, c), chars) || return false

    sum(parse(Int, c) * i for (c, i) in zip(chars, 10:-1:1)) % 11 == 0
end

Base.isvalid(::Type{ISBN}, s::AbstractString) = verify(s)

Version data entries

72 entries across 72 versions & 1 rubygems

Version Path
trackler-2.2.1.119 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.118 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.117 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.116 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.115 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.114 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.113 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.111 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.110 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.109 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.108 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.107 tracks/julia/exercises/isbn-verifier/example.jl