Maison  >  Article  >  développement back-end  >  Comment utiliser les expressions régulières Python pour extraire le numéro d'identification

Comment utiliser les expressions régulières Python pour extraire le numéro d'identification

WBOY
WBOYoriginal
2023-06-22 10:35:264125parcourir

Dans le processus de traitement des données, il est souvent nécessaire d'extraire des informations dans un format spécifique à partir d'un texte. En tant qu’information personnelle relativement courante, le numéro d’identification est souvent utilisé dans le traitement des données. Vous pouvez utiliser des expressions régulières Python pour extraire facilement le numéro d'identification et effectuer certaines vérifications.

Le numéro de carte d'identité est composé de 18 chiffres, dont la région, la date de naissance et le code de vérification dans le numéro d'identification. En Python, nous pouvons utiliser la fonction d'expression régulière du module re pour extraire le numéro d'identification.

Tout d'abord, nous devons préparer un fichier texte contenant le numéro d'identification. Supposons que le fichier s'appelle id_list.txt et que chaque ligne contient un numéro d'identification.

Ensuite, nous pouvons utiliser le code suivant pour lire le fichier et extraire le numéro d'identification :

import re

# 读取文件
with open('id_list.txt', 'r') as f:
    content = f.read()

# 使用正则表达式匹配身份证号码
pattern = r'd{18}|(d{17}(d|X|x))'
id_list = re.findall(pattern, content)

Dans le code ci-dessus, nous avons utilisé l'expression régulière r'd{18}|(d{17} (d |X|x))' pour correspondre au numéro d'identification. Il y a deux parties dans cette expression régulière, à savoir d{18} et d{17}(d|X|x). Parmi eux, d{18} signifie correspondre à 18 chiffres, c'est-à-dire le numéro d'identification complet ; d{17}(d|X|x) signifie correspondre à 17 chiffres et ; Le dernier chiffre peut être des chiffres ou des lettres X/x du numéro d'identification. En utilisant le symbole | pour relier les deux parties, nous pouvons faire correspondre le numéro d'identification complet et le numéro d'identification avec le code de contrôle en même temps. r'd{18}|(d{17}(d|X|x))'来匹配身份证号码。该正则表达式中有两部分,分别为d{18}d{17}(d|X|x)。其中,d{18}表示匹配18位数字,即完整的身份证号码;d{17}(d|X|x)表示匹配17位数字和最后一位可能为数字或字母X/x的身份证号码。通过使用|符号连接两部分,我们可以同时匹配完整的身份证号码和带校验码的身份证号码。

使用re.findall函数可以在文本中匹配所有符合正则表达式的字符串,并返回匹配结果的列表。在这里,我们将提取到的身份证号码列表保存到id_list

Utilisez la fonction re.findall pour faire correspondre toutes les chaînes qui correspondent à l'expression régulière dans le texte et renvoyer une liste de résultats correspondants. Ici, nous enregistrons la liste de numéros d'identification extraite dans la variable id_list.

Ensuite, nous pouvons vérifier le numéro d'identification extrait. Les règles de vérification des numéros de carte d'identité peuvent faire référence aux normes pertinentes, qui sont brièvement présentées ici.

Le code de vérification est le dernier chiffre ou lettre X/x du numéro d'identification. Il est dérivé des 17 premiers chiffres grâce à un certain algorithme. La méthode de calcul du code de contrôle est la suivante :
  1. Multipliez les 17 premiers chiffres par les coefficients de poids correspondants pour obtenir 17 produits
  2. Ajoutez les 17 produits pour obtenir un total
  3. Divisez la somme par 11 pour obtenir A ; reste ;

  4. Obtenez le code de contrôle en fonction du reste. La correspondance spécifique est la suivante : lorsque le reste est 0, le code de contrôle est 1 lorsque le reste est 1, le code de contrôle est
  5. lorsque le reste est 2 ; , le code de contrôle est X /x ; lorsque le reste est 3-10, le code de contrôle est 11 moins le reste.

Ce qui suit est l'implémentation en code Python du code de contrôle :

# 校验码计算
def check_code(id_num: str) -> str:
    if len(id_num) == 18:
        factor_list = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
        check_list = list(id_num[:-1])
        check_sum = sum([int(check_list[i]) * factor_list[i] for i in range(17)])
        check_num = (12 - check_sum % 11) % 11
        if check_num == 0:
            return '1'
        elif check_num == 1:
            return '0'
        elif check_num == 2:
            return 'X'
        else:
            return str(12 - check_num)
    else:
        return ''

Dans le code ci-dessus, nous définissons une fonction appelée check_code pour calculer le code de contrôle du numéro de carte d'identité. Le paramètre de la fonction est le numéro d'identification et la valeur de retour est le code de vérification.

Enfin, nous pouvons vérifier les numéros d'identification extraits dans la boucle, et conserver uniquement les numéros d'identification avec les codes de vérification corrects :

# 进行校验,并输出结果
valid_id_list = []
for id_num in id_list:
    # 计算校验码
    code = check_code(id_num[0])
    if code and code == id_num[0][-1]:
        valid_id_list.append(id_num[0])
print(valid_id_list)

Dans le code ci-dessus, nous définissons une liste vide nommée valid_id_list, utilisée pour stocker le numéro d'identification avec le bon le code de vérification. Utilisez une boucle pour parcourir tous les numéros d'identification extraits et calculer leurs codes de contrôle. Si le code de contrôle est le même que le code de contrôle dans le numéro d'identification extrait, ajoutez le numéro d'identification à valid_id_list. Enfin, nous générons valid_id_list pour obtenir une liste de numéros d'identification avec les codes de vérification corrects.

En général, l'utilisation du module re et des expressions régulières de Python peut facilement extraire les numéros d'identification du texte et également effectuer certaines vérifications sur ceux-ci. Ceci est très utile pour traiter des informations formatées telles que les numéros d'identification. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn