L’IMEI (International Mobile Equipement Identity) est un numéro composé de 15 chiffres. Il permet à opérateur de réseau GSM d’identifier le mobile appelant et ainsi de l’autoriser ou non à se connecter.
Un numéro est dit un IMEI s’il vérifie la formule de LUHN décrite ci-dessous :
1- Calculer la somme S des chiffres du numéro en appliquant le principe suivant :
Doubler les valeurs des chiffres de rang pair.
Si le double est supérieur ou égale à 10 alors il sera remplacé par la somme de ses chiffres.
N.B :Le premier chiffre à gauche est de rang 1, le deuxième chiffre à gauche est de rang 2 etc.
2- Si la somme S est un multiple de 10 alors le nombre est en accord avec la formule de LUHM et dans ce cas il est dit valide, sinon il est dit invalide.
Exemple : Le nombre 354365039281174 est un IMEI, car en appliquant la formule de LUHN on obtient 60 qui est un multiple de 10.
Etape1 : 3 5*2 4 3*2 6 5*2 0 3*2 9 2*2 8 1*2 1 7*2 4
Etape2 : 3 10 4 6 6 10 0 6 9 4 8 2 1 14 4
Etape3 :S=3+1+0+4+ 6 + 6 1+0 +0 + 6 + 9 +4 + 8 +2 +1 +1+4 + 4 =60
Le nombre 100000000001111 n’est pas un IMEI, car en appliquant la formule de LUHN on obtient 7 qui n’est pas multiple de 10.
Ecrire un programme qui permet de saisir un numéro de 15 chiffres et de vérifier s’il est un IMEI ou non en appliquant la formule de LUHM.
Pour vérifier si un numéro de 15 chiffres est un IMEI valide en utilisant la formule de Luhn, voici le principe de l'algorithme en détail :
1- Saisie et validation de la longueur :
Saisir le numéro et vérifier qu'il contient exactement 15 chiffres.
2- Application de la formule de Luhn pour calculer la somme S :
Partir du premier chiffre à gauche (qui est de rang 1).
Pour chaque chiffre de rang impair (1, 3, 5, ...), ajouter directement ce chiffre à la somme S.
Pour chaque chiffre de rang pair (2, 4, 6, ...), doubler sa valeur :
- Si le double est supérieur ou égal à 10, remplacer le double par la somme des chiffres du double.
- Ajouter le résultat à la somme S.
3- Vérification de la validité :
Si la somme S est un multiple de 10, alors le numéro est un IMEI valide.
Sinon, le numéro est invalide.
Dans cet algorithme, On va utiliser trois fonctions:
Algorithme du programme principal
1 2 3 4 5 6 7 8 |
Algorithme code_IMEI Debut ch<- saisie_code() Si test_IMEI(ch) alors ecrire(ch+' est un code IMEI') Sinon ecrire(ch+' est un code non IMEI') Fin |
Déclaration des objets
Objet | Type / Nature |
ch | chaîne des caractères |
La fonction verif
Cette fonction vérifie si une chaîne est formée uniquement de 15 chiffres.
1 2 3 4 5 6 7 8 9 10 11 |
fonction verif(ch) Début Si long(ch)=15 alors i<-0 Tant que (0<=Valeur(ch[i])<=9) et (i<long(ch)-1) alors i<-i+1 Fin tant que retourner (0<=Valeur(ch[i])<=9) Sinon retourner Faux Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
La fonction saisie_code
Cette fonction retourne une chaîne formée de 15 chiffres.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_code() Début Ecrire('Donner un numero composé de 15 chiffres: ') lire(ch) Tant que verif(ch)=Faux : Ecrire('Donner un numero composé de 15 chiffres: ') lire(ch) Fin tant que retourner ch Fin |
Déclaration des objets
Objet | Type / Nature |
ch | chaîne des caractères |
La fonction test_IMEl
Cette fonction vérifie si un numéro de 15 chiffres est un code IMEI valide.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
fonction test_IMEI(ch) Début s<-0 pour i de 0 à 14 faire v=Valeur(ch[i]) Si ((i+1) mod 2=0) alors v<-v*2 s<-s+(v div 10)+(v mod 10) Fin pour Si s mod 10 = 0 alors retourner Vrai Sinon retourner Faux Finsi Fin |
Déclaration des objets
Objet | Type / Nature |
s | entier |
v | entier |
i | entier |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
def verif(ch): if len(ch)==15 : i=0 while (0<=int(ch[i])<=9) and (i<len(ch)-1) : i=i+1 return (0<=int(ch[i])<=9) else: return False def saisie_code(): ch=input('Donner un numero composé de 15 chiffres: ') while verif(ch)==False : ch=input('Donner un numero composé de 15 chiffres: ') return ch def test_IMEI(ch): s=0 for i in range(15) : v=int(ch[i]) if ((i+1) % 2==0) : v=v*2 s=s+(v // 10)+(v % 10) if s % 10 == 0 : return True else : return False # programme principal ch= saisie_code() if test_IMEI(ch) : print(ch+' est un code IMEI') else: print(ch+' est un code non IMEI') |
Exécution du programme
Pour créer une application en Python pour vérifier si un numéro de 15 chiffres est un code IMEI valide en utilisant Qt Designer pour l'interface graphique, suivez ces étapes :
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLineEdit
nommé 'ch' pour entrer des lettres romains .
QPushButton
nommé 'IMEI_bt' pour exécuter le module test_IMEI .
QLabel
nommé 'msg' pour afficher un message d'erreur si long(ch) != 15 et si ch contient des caractères non numériques et afficher le résultat du test IMEI du code.
Enregistrez le fichier avec l'extension .ui
, par exemple code_IMEI-interface.ui
.
Voici un exemple de script Python qui utilise l'interface graphique générée par Qt Designer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets app = QApplication([]) windows = loadUi ("code_IMEI-interface.ui") def test_IMEI() : ch = windows.ch.text() s=0 for i in range(15) : v=int(ch[i]) if ((i+1) % 2==0) : v=v*2 s=s+(v // 10)+(v % 10) if s % 10 == 0 : windows.msg.setText('Ce code est IMEI ') else : windows.msg.setText('Ce code est non IMEI ') windows.IMEI_bt.clicked.connect(test_IMEI) windows.show() app.exec_() |
Exécution du programme
Vous pouvez voir aussi :
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
+216 92 886 231
medaliprof@gmail.com
Site robotique réalisé par Mohamed Ali-Prof Info