Adloun

JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 5 · Application directe du cours

Clé de contrôle d'un ISBN

Tableaux et objets · niveau 2

Énoncé

Le treizième chiffre d'un ISBN-13 est une clé de contrôle : on multiplie les douze premiers chiffres alternativement par 1 et par 3 (le premier par 1), on additionne, et la clé est ce qu'il faut ajouter à cette somme pour atteindre le multiple de 10 suivant (0 si la somme en est déjà un).

  • Écrire cleIsbn(douzeChiffres), sans boucle écrite à la main, avec map et reduce. Calculer la clé de 978295630001.
  • Écrire isbnValide(isbn), qui accepte des tirets (978-2-9563-0001-4).

Corrigé


// Chiffre de contrôle d'un ISBN-13 : on pondère les 12 premiers chiffres par
// 1, 3, 1, 3…, et le 13e complète la somme au multiple de 10 supérieur.
export function cleIsbn(douzeChiffres) {
  const somme = [...douzeChiffres]
    .map(Number)
    .reduce((s, chiffre, i) => s + chiffre * (i % 2 === 0 ? 1 : 3), 0);
  return (10 - (somme % 10)) % 10;
}

export function isbnValide(isbn) {
  const chiffres = isbn.replaceAll("-", "");
  return /^\d{13}$/.test(chiffres) && cleIsbn(chiffres.slice(0, 12)) === Number(chiffres[12]);
}

console.log(cleIsbn("978295630001"));
console.log(isbnValide("978-2-9563-0001-4"), isbnValide("9782956300015"), isbnValide("97829"));

4
true false false

Pour 978295630001 : , et . [...chaine] découpe la chaîne en caractères, map(Number) les convertit en nombres, et l'indice fourni à reduce choisit le poids. Le dernier modulo donne 0 quand la somme est déjà un multiple de

  1. L'expression régulière vérifie qu'il reste exactement treize chiffres.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →