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.159 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.158 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.157 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.156 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.155 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.154 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.153 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.152 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.151 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.150 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.149 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.148 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.147 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.146 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.145 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.144 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.143 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.142 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.141 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.140 tracks/julia/exercises/isbn-verifier/example.jl