ISBN
International Standard Book Number: o número de 13 dígitos do livro, com prefixo 978 ou 979, terminado em um dígito verificador por módulo 10.
Validar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
Valida um ISBN-13: prefixo 978 ou 979, 13 dígitos e o dígito verificador por módulo 10.
- Dígito verificador: os 12 primeiros dígitos com pesos 1 e 3 alternados. O dígito verificador leva a soma a um múltiplo de 10. É a mesma regra do GTIN-13.
- O ISBN de 10 dígitos é rejeitado: desde 2007 só existe a forma de 13 dígitos.
979-0é rejeitado: é a faixa do ISMN (partituras), e a RangeMessage não lhe atribui grupo ISBN. O prefixo 977 e qualquer outro prefixo são rejeitados.- Separadores: espaço,
.,-ou/entre dois dígitos, sozinhos ou em sequência (os caracteres de máscara quecpf.isValidlê), e espaços nas pontas do valor. Quaisquer dois dígitos podem ser uma fronteira, porque os grupos variam de comprimento. Separador no início ou no fim e qualquer outro caractere são rejeitados. - O rótulo
ISBNque o livro imprime antes do número não faz parte do valor:ISBN 978-65-89999-01-0é inválido, como em qualquer outro validador. - Não verifica se o grupo de registro e o registrante estão atribuídos.
isbn.getInfoverifica. - O exemplo impresso pela Agência Brasileira do ISBN,
978-65-89999-01-3, tem dígito verificador errado. O número válido termina em 0:978-65-89999-01-0. - Só uma string é lida. Qualquer outro tipo retorna
false.
| Parâmetro | Tipo | Obrigatório |
|---|---|---|
value | string | sim |
| retorna | boolean |
Verifica se um ISBN-13 é válido: o prefixo 978 ou 979 e o dígito verificador módulo 10 do Manual do Usuário do ISBN (os 12 primeiros dígitos com pesos alternados 1 e 3, a mesma regra do GTIN-13).
- Separadores entre dois dígitos (espaço,
.,-ou/, sozinhos ou em sequência, como oisValidCpflê a máscara dele) e espaços em volta do valor são aceitos; qualquer outra coisa, inclusive um separador no começo ou no fim ou o rótuloISBNque o livro imprime antes do número, torna o valor inválido. - Um número
979-0é um ISMN (partitura impressa), não um ISBN: a RangeMessage não dá grupo de ISBN a essa faixa, então ele é rejeitado. - Não verifica se o grupo e o registrante estão atribuídos; veja
getIsbnInfo. - O exemplo impresso da Agência Brasileira do ISBN,
ISBN 978-65-89999-01-3, não traz o dígito que a regra dá (0), então é rejeitado.
import { isValidIsbn } from '@brazilian-utils/brazilian-utils';
isValidIsbn('9788533302273'); // true
isValidIsbn('978-65-89999-01-0'); // true
isValidIsbn('978-85-333-0227-4'); // false (dígito verificador errado)
isValidIsbn('8533302276'); // false (a forma de 10 dígitos)Teste com JavaScript isValidIsbn
Casos de teste compartilhados (38) e o resultado em cada biblioteca isbn.isValid
Formatar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
Formata um ISBN-13 como ele é impresso: os cinco elementos separados por hifens (978-65-89999-01-0). Os comprimentos do grupo e do registrante vêm de isbn.getInfo.
- Retorna uma string vazia exatamente quando
isbn.getInforetornanull: valor parcial ou inválido, ou grupo ou registrante ainda não atribuído. - O rótulo
ISBNnão é acrescentado, e também não é aceito na entrada:isbn.getInfoo rejeita, então um valor com rótulo retorna uma string vazia. - A entrada pode usar qualquer sequência de separadores (espaço,
.,-,/) entre os dígitos, como emisbn.isValid. - Ao contrário de
cpf.format, não formata um valor parcial, porque os comprimentos dos elementos dependem do número inteiro.
| Parâmetro | Tipo | Obrigatório |
|---|---|---|
value | string | sim |
| retorna | string |
Coloca os hífens de um ISBN-13 entre os seus elementos, como o getIsbnInfo o divide. Os comprimentos dos elementos variam, então um valor parcial ou inválido, ou numa faixa ainda não atribuída, retorna ''. O rótulo ISBN não é acrescentado.
import { formatIsbn } from '@brazilian-utils/brazilian-utils';
formatIsbn('9788533302273'); // '978-85-333-0227-3'
formatIsbn('9780306406157'); // '978-0-306-40615-7'
formatIsbn('978853330227'); // ''Fonte: Manual do Usuário do ISBN, 7ª edição, faixas do ISBN (RangeMessage) da Agência Internacional do ISBN e a Agência Brasileira do ISBN.
Código: brazilian-utils/javascriptTeste com JavaScript formatIsbn
Casos de teste compartilhados (12) e o resultado em cada biblioteca isbn.format
Interpretar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
Remove os hifens e todo caractere que não é dígito de um ISBN-13, mantendo no máximo 13 dígitos.
- Só remove o que não é dígito e mantém os 13 primeiros. Não remove o rótulo
ISBN: emISBN-13: 978-85-333-0227-3o13fica entre os dígitos, e o resultado é1397885333022. Passe o número sem o rótulo. - Um valor parcial mantém os dígitos que tem. A função não verifica o ISBN.
- Só uma string é lida. Qualquer outro tipo retorna uma string vazia.
| Parâmetro | Tipo | Obrigatório |
|---|---|---|
value | string | sim |
| retorna | string |
Remove os hífens e todo caractere que não seja dígito, mantendo no máximo 13 dígitos.
import { parseIsbn } from '@brazilian-utils/brazilian-utils';
parseIsbn('978-85-333-0227-3'); // '9788533302273'Teste com JavaScript parseIsbn
Casos de teste compartilhados (10) e o resultado em cada biblioteca isbn.parse
Decodificar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
Decompõe um ISBN-13 válido em seus elementos: prefixo, grupo de registro, registrante, publicação e dígito verificador, com a agência do grupo. Retorna null quando isbn.isValid é false, e também quando o grupo ou o registrante está numa faixa ainda não atribuída.
- O valor segue as regras de
isbn.isValid: uma sequência de separadores é aceita e o rótuloISBNnão, entãoISBN 978-65-89999-01-0retornanull. - O grupo e o registrante têm comprimentos variáveis. Eles vêm da RangeMessage da International ISBN Agency, que a biblioteca atualiza toda semana.
- Dígito verificador válido não basta: grupo ou registrante não atribuído retorna
null. Isso inclui as lacunas no início de um grupo, como em 978-968 e 978-970. - Campos:
isbn(os 13 dígitos, sem rótulo nem hifens),prefix("978"ou"979"),registrationGroup,registrantepublication(strings, com os zeros à esquerda),checkDigit(um número),agencyeisBrazilian.agencyé o nome que a RangeMessage dá ao grupo, por exemploBrazilouEnglish language. isBrazilianétruepara os grupos 85 e 65 (Agência Brasileira do ISBN).- Retorna um objeto novo a cada chamada.
| Parâmetro | Tipo | Obrigatório |
|---|---|---|
value | string | sim |
| retorna | IsbnInfo | null |
Divide um ISBN-13 válido nos seus elementos, como um IsbnInfo, seguindo as faixas que a Agência Internacional do ISBN publica (a RangeMessage), que dão os comprimentos variáveis do grupo e do registrante.
- Retorna
nullquando o valor não é válido peloisValidIsbn, ou quando o grupo ou o registrante cai numa faixa ainda não atribuída. - As faixas são atualizadas pelo workflow de datasets.
| Campo | Descrição |
|---|---|
isbn | Os 13 dígitos |
prefix | '978' ou '979' |
registrationGroup | O país, região ou área de idioma, por exemplo '85' ou '65' para o Brasil |
registrant | A editora ou selo dentro do grupo |
publication | A edição dentro do registrante |
checkDigit | O dígito verificador, o último dígito |
agency | A agência que a Agência Internacional do ISBN lista para o grupo, por exemplo 'Brazil' ou 'English language' |
isBrazilian | true para os grupos da Agência Brasileira do ISBN, 85 e 65 |
import { getIsbnInfo } from '@brazilian-utils/brazilian-utils';
getIsbnInfo('978-65-89999-01-0');
// { isbn: '9786589999010', prefix: '978', registrationGroup: '65', registrant: '89999',
// publication: '01', checkDigit: 0, agency: 'Brazil', isBrazilian: true }
getIsbnInfo('9780306406157')?.agency; // 'English language'Teste com JavaScript getIsbnInfo
Casos de teste compartilhados (15) e o resultado em cada biblioteca isbn.getInfo
Fontes oficiais
- isbn-international.org/content/isbn-users-manual/…/29
- cblservicos.org.br/isbn/estrutura
- isbn-international.org/export_rangemessage.xml
- isbn-international.org/range_file_generation
Veja também GTIN (EAN/UPC)
Atualizado em
