Skip to content

Instantly share code, notes, and snippets.

@youssef3wi
Created May 13, 2024 09:10
Show Gist options
  • Select an option

  • Save youssef3wi/f08ab49bd8b328394cb4a9f1fdb3b9af to your computer and use it in GitHub Desktop.

Select an option

Save youssef3wi/f08ab49bd8b328394cb4a9f1fdb3b9af to your computer and use it in GitHub Desktop.
Afin de détecter des erreurs dans des identifiants numériques, une clé de contrôle est souvant ajoutée à cet identifiant.
/**
* Afin de détecter des erreurs dans des identifiants numériques, une clé de contrôle est souvant ajoutée à cet identifiant.
* <p>
* Implémentez la méthode {@code computeCheckDigit(identifiantNumber)} qui prend en entrée un identifiant
* (sous la forme d'une chaîne de caractères) et qui retourne la clé de contrôle en utilisant l'algorithme qui suit :
* <ul>
* <li>Faites la somme des chiffres situées à des positions paires (positions 0, 2, 4, etc.).</li>
* <li>Multipliez le résultat par tois.</li>
* <li>Ajoutez à ce nombre la somme des chiffres situés à des positions impaires (positions 1, 3, 5, etc.).</li>
* <li>Prenez le dernier chiffre de ce résultat.</li>
* <li>Si ce nombre n'est pas 0, soustrayez le à 10. Sinon, gardez 0.</li>
* <li>Retournez le chiffre résultant.</li>
* </ul>
* (On suppose que le premier chiffre situé à gauche a pour position 0)
* <p>
* <b>Exemple :</b>
* Soit l'identifiant {@literal 39847}
* <ul>
* <li>Sommez les chiffres aux positions paires : {@code 3 + 8 + 7 = 18}</li>
* <li>Multipliez par trois : {@code 18 x 3 = 54}</li>
* <li>Ajoutez les chiffres situées aux positions impaires : {@code 54 + (9 + 4) = 67}</li>
* <li>Le dernier chiffre est {@literal 7}</li>
* <li>Soustrayez 7 à 10 : {@code 10 - 7 = 3}</li>
* </ul>
* Le résultat attendu pour {@literal 39847} est {@literal 3}.
* <p>
* <b>Contraintes: </b>
* La longeur de {@literal identifiantNumber} peut varier de 1 à 12 caractères.
*/
public class ComputeCheckDigit {
public static int computeCheckDigit(String identifiantNumber) {
int sumOdd = 0, sumEven = 0;
for (int idx = 0; idx < identifiantNumber.length(); idx++) {
int digit = Integer.parseInt(String.valueOf(identifiantNumber.charAt(idx)));
if (idx % 2 == 0) {
sumEven += digit;
} else {
sumOdd += digit;
}
}
int lastDigit = ((sumEven * 3) + sumOdd) % 10;
if (lastDigit != 0) {
lastDigit = 10 - lastDigit;
}
return lastDigit;
}
public static void main(String[] args) {
System.out.println(computeCheckDigit("39847")); // 3
System.out.println(computeCheckDigit("34")); // 7
System.out.println(computeCheckDigit("343428")); // 0
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment