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.

  • Matriz de paridade

Validar

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 que cpf.isValid lê), 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 ISBN que 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.getInfo verifica.
  • 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âmetroTipoObrigatório
valuestringsim
retornaboolean

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 o isValidCpf lê 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ótulo ISBN que 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)
Código: brazilian-utils/javascript
Teste com JavaScript isValidIsbn
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (38) e o resultado em cada biblioteca isbn.isValid

Formatar

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.getInfo retorna null: valor parcial ou inválido, ou grupo ou registrante ainda não atribuído.
  • O rótulo ISBN não é acrescentado, e também não é aceito na entrada: isbn.getInfo o 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 em isbn.isValid.
  • Ao contrário de cpf.format, não formata um valor parcial, porque os comprimentos dos elementos dependem do número inteiro.
ParâmetroTipoObrigatório
valuestringsim
retornastring

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/javascript
Teste com JavaScript formatIsbn
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (12) e o resultado em cada biblioteca isbn.format

Interpretar

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: em ISBN-13: 978-85-333-0227-3 o 13 fica 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âmetroTipoObrigatório
valuestringsim
retornastring

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'
Código: brazilian-utils/javascript
Teste com JavaScript parseIsbn
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (10) e o resultado em cada biblioteca isbn.parse

Decodificar

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ótulo ISBN não, então ISBN 978-65-89999-01-0 retorna null.
  • 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, registrant e publication (strings, com os zeros à esquerda), checkDigit (um número), agency e isBrazilian. agency é o nome que a RangeMessage dá ao grupo, por exemplo Brazil ou English language.
  • isBrazilian é true para os grupos 85 e 65 (Agência Brasileira do ISBN).
  • Retorna um objeto novo a cada chamada.
ParâmetroTipoObrigatório
valuestringsim
retornaIsbnInfo | 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 null quando o valor não é válido pelo isValidIsbn, ou quando o grupo ou o registrante cai numa faixa ainda não atribuída.
  • As faixas são atualizadas pelo workflow de datasets.
CampoDescrição
isbnOs 13 dígitos
prefix'978' ou '979'
registrationGroupO país, região ou área de idioma, por exemplo '85' ou '65' para o Brasil
registrantA editora ou selo dentro do grupo
publicationA edição dentro do registrante
checkDigitO dígito verificador, o último dígito
agencyA agência que a Agência Internacional do ISBN lista para o grupo, por exemplo 'Brazil' ou 'English language'
isBraziliantrue 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'
Código: brazilian-utils/javascript
Teste com JavaScript getIsbnInfo
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (15) e o resultado em cada biblioteca isbn.getInfo

Fontes oficiais

Veja também GTIN (EAN/UPC)

Atualizado em

Nesta página