O processo de verificação do ISBN-10 serve para validar números de identificação de livros.
Normalmente contêm hífenes e têm este aspeto: 3-598-21508-8
O formato ISBN-10 é composto por 9 algarismos (de 0 a 9) mais um caráter de verificação (apenas um algarismo ou um X). Quando o caráter de verificação é um X, este representa o valor '10'. Podem ser escritos com ou sem hífenes, e a sua validade pode ser verificada com a seguinte fórmula:
(d₁ * 10 + d₂ * 9 + d₃ * 8 + d₄ * 7 + d₅ * 6 + d₆ * 5 + d₇ * 4 + d₈ * 3 + d₉ * 2 + d₁₀ * 1) mod 11 == 0
Se o resultado for 0, então é um ISBN-10 válido; caso contrário, é inválido.
Vamos usar o ISBN-10 3-598-21508-8.
Substituímos os valores na fórmula e obtemos:
(3 * 10 + 5 * 9 + 9 * 8 + 8 * 7 + 2 * 6 + 1 * 5 + 5 * 4 + 0 * 3 + 8 * 2 + 8 * 1) mod 11 == 0
Como o resultado é 0, isto prova que o nosso ISBN é válido.
Dada uma string, o programa deve verificar se a string fornecida é um ISBN-10 válido. Pôr isto em prática exige alguma reflexão sobre o pré-processamento e a análise da string antes de calcular o algarismo de verificação do ISBN.
O programa deve ser capaz de verificar ISBN-10 tanto com como sem hífenes de separação.
Converter strings em números pode ser complicado em certas linguagens.
Agora, é ainda mais complicado, uma vez que o algarismo de verificação de um ISBN-10 pode ser 'X' (que representa '10').
Por exemplo, 3-598-21507-X é um ISBN-10 válido.
Se tentares estas tarefas, escreve os teus próprios testes para elas no ficheiro da tua solução!
Define uma macro de string para que isbn"3-598-21507-X" == ISBN("3-598-21507-X").
Deixa também o construtor aceitar ISBN-13. O mesmo ISBN deve ser considerado igual independentemente do formato: ISBN("1-234-56789-X") == ISBN("978-1-234-56789-7").
Define uma função ou um iterador para gerar um ISBN válido, talvez até a partir de um ISBN inicial.
Consegues guardar o ISBN como um número inteiro em vez de uma string, e seria isso alguma vez uma boa ideia? Se o fizesses, continuarias a conseguir imprimir o ISBN (incluindo o algarismo de controlo) como uma string?
Inscreve-te no Exercism para aprenderes e dominares Julia com 35 conceitos128 exercícios, e mentoria humana real, tudo grátis.