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.180 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.179 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.178 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.177 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.176 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.175 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.174 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.173 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.172 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.171 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.170 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.169 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.167 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.166 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.165 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.164 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.163 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.162 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.161 tracks/julia/exercises/isbn-verifier/example.jl
trackler-2.2.1.160 tracks/julia/exercises/isbn-verifier/example.jl