亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python實現身份證號碼驗證的示例代碼

 更新時間:2024年02月27日 09:04:04   作者:鮭魚683  
本文主要介紹了Python實現身份證號碼驗證的示例代碼,當用戶輸入身份證號,按下檢查按鈕,即可判斷身份證號是否正確,具有一定的參考價值,感興趣的可以了解一下

摘要: 該設計主要使用python語言來實現身份證號驗證程序。它運用 tkinter模塊生成GUI界面。當用戶輸入身份證號,按下檢查按鈕,即可判斷身份證號是否正確。該程序簡潔,靈活,執(zhí)行效率高。
關鍵詞: 身份證號; python;tkinter

1 概述

1.1背景

中華人民共和國居民身份證是國家法定的證明公民個人身份的有效證件。在當今社會,有一些不法分子為了躲避法律追捕,偽造身份證的現象也是很普遍的,為了驗證公民的身份證號碼是否符合國家標準,設計一個身份證號碼校驗系統(tǒng)是有必要的。

1.2身份證號碼編碼規(guī)則

(1)前六位表示編碼對象常住戶口所在縣(市、鎮(zhèn)、區(qū))的行政區(qū)劃代碼。1-2位省、自治區(qū)、直轄市代碼; 3-4位地級市、盟、自治州代碼; 5-6位縣、縣級市、區(qū)代碼。
(2)第七位到第十四位表示編碼對象出生的年、月、日,其中年份用四位數字表示,年、月、日之間不用分隔符。
(3)第十五位到十七位地址碼所標識的區(qū)域范圍內,對同年、月、日出生的人員編定的順序號。其中第十七位奇數分給男性,偶數分給女性。
(4)18位為校驗碼是根據前面十七位數字碼,按照ISO 7064:1983.MOD 11-2校驗碼計算出來的檢驗碼。如果某人的尾號是0-9,就不會出現X,但如果尾號是10,那么就得用X來代替,X是羅馬數字的10,用X來代替10,可以保證公民的身份證符合國家標準。最后一位校驗碼的計算方法:首先將前面的身份證號碼17位數分別乘以不同的系數。從第一位到第十七位的系數分別為:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2,接下來將這17位數字和系數相乘的結果相加,然后用加出來的和除以11,看余數,余數只可能有0-1-2-3-4-5-6-7-8-9-10這11個數字。其分別對應的最后一位身份證的號碼為1-0-X -9-8-7-6-5-4-3-2。通過上述方法可以計算一個人的身份證號是否合法。

1.3身份證號驗證內容

(1)前六位是否是已有的歸屬地的號碼。
(2)第七位到第十四位,年份是否在1900到2000中,月份是否在01到12中間,對應月份的天數是否符合(平年2月只有28天)。
(3)第18位檢驗位是否符合要求。

2 系統(tǒng)設計

2.1.功能模塊設計

該系統(tǒng)的主要功能是實現身份證號碼的驗證,當輸入身份證號碼時,檢測身份證是否正確。

在這里插入圖片描述

2.1.1 GUI界面設計

Tkinter 是使用 python 進行窗口視窗設計的模塊。Tkinter模塊(“Tk 接口”)是Python的標準Tk GUI工具包的接口。作為python 特定的GUI界面,是一個圖像的窗口,tkinter是python 自帶的,可以編輯的GUI界面,我們可以用GUI 實現很多直觀的功能。

  • Button:一個簡單的按鈕,用來執(zhí)行一個命令或別的操作。
  • Entry:文本輸入域。
  • Label:顯示一個文本或圖象。
  • Text:格式化文本顯示。允許你用不同的樣式和屬性來顯示和編輯文本。同時支持內嵌圖象和窗口。

GUI界面設計如圖所示:

在這里插入圖片描述

2.1.2 身份證號驗證

1.前六位驗證:前六已位有確定的歸屬地號碼,我們將這些已有的號碼建立一個名為area列表。提取要檢測號碼的前六位,用if語句判斷是否屬于列表中?如果屬于,再判斷后幾位;如果不屬于,則輸出“身份證地區(qū)非法,錯誤的身份證號碼”。如圖3所示。

在這里插入圖片描述

2.中間8位驗證:用if語句先行判斷是否為閏年,然后用re模塊進行判斷年月日是否正確。正確,則繼續(xù)判斷最后一位;如果不正確則輸出“身份證號出生日期超出范圍或者含有非法字符,錯誤的身份證號”。如圖所示。

在這里插入圖片描述

閏年出生日期合法性判斷表達式:[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]’’|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))’’[0-9]{3}[0-9Xx]$
閏年出生日期合法性判斷表達式:[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]’’|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-8]))’’[0-9]{3}[0-9Xx]$

3.最后一位檢驗位驗證: 采用逐位加權求和得出前17位分別與系數成績的之和。然后除以11取余數,與相應的檢驗位對比,如果相等則輸出“正確的身份證號”;如果不相等,則輸出“身份證號碼校驗錯誤,錯誤的身份證號”。如圖6和圖5。

在這里插入圖片描述

在這里插入圖片描述

2.2 數據結構設計

本節(jié)將加權系數定義為名為W = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]的列表;對應身份證檢驗位定名為IDcard_CHECK = [‘1’, ‘0’, ‘X’, ‘9’, ‘8’, ‘7’, ‘6’, ‘5’, ‘4’, ‘3’, ‘2’]的列表,采用逐位加權求和,簡化程序,優(yōu)化算法,如圖7所示:

在這里插入圖片描述

2.3 函數功能描述

省份證驗證主程序:def check(),當點擊按鈕“檢查”,將執(zhí)行此程序。刪除上一個身份證號的輸出結果,顯示本次輸入的身份證號檢查結果,并刪除本次輸入框身份證號。方便快捷,節(jié)省時間。

3 程序實現

import tkinter as tk  # 使用Tkinter前需要先導入
import re

# 第1步,實例化object,建立窗口window
window = tk.Tk()

# 第2步,給窗口的可視化起名字
window.title('Chris')

# 第3步,設定窗口的大小(長 * 寬)
window.geometry('700x500')

# 第4步,在圖形界面上設定標簽
l = tk.Label(window, text='身份證號驗證', font=('宋體', 30), width=40, height=2)
l1 = tk.Label(window, text='身份證號:', font=('Arial', 16), width=40, height=2)

# 第5步,放置標簽
l.place(x=-80, y=0, anchor='nw')
l1.place(x=-100, y=80, anchor='nw')

# 第4步,在圖形界面上設定輸入框控件entry框并放置
e = tk.Entry(window, show=None, font=('Arial', 20),)
e.place(x=200, y=90, anchor='nw')


# 第5步,定義兩個觸發(fā)事件時的函數check和delete
def check():        # 按鈕‘檢查'對應的函數
    t.delete(1.0, 'end')
    IDcard = e.get()
    if len(IDcard) != 18:
        var = '號碼:' + IDcard + "\n身份證號碼位數不對!\n錯誤的身份證號碼.\n請重新輸入!\n"
    else:
        IDcard_add = IDcard[0:6]     # 身份證前6位,對應歸屬地
        IDcard_birth = IDcard[6:14]  # 身份證中間8位,對應出生日期
        IDcard_sex = IDcard[14:17]   # 身份證15,,16,17位,對應性別

        area = {"11": "北京", "12": "天津", "13": "河北", "14": "山西", "15": "內蒙古", "21": "遼寧",
                "22": "吉林", "23": "黑龍江", "31": "上海", "32": "江蘇", "33": "浙江", "34": "安徽",
                "35": "福建", "36": "江西", "37": "山東", "41": "河南", "42": "湖北","43": "湖南",
                "44": "廣東", "45": "廣西", "46": "海南", "50": "重慶", "51": "四川", "52": "貴州",
                "53": "云南", "54": "西藏", "61": "陜西", "62": "甘肅", "63": "青海", "64": "寧夏",
                "65": "新疆", "71": "臺灣", "81": "香港", "82": "澳門", "91": "國外"}

        # 地區(qū)校驗
        if IDcard[0:2] not in area.keys():
            var = '號碼:' + IDcard + '\n身份證地區(qū)非法!\n錯誤的身份證號碼\n'
        else:
            year = IDcard_birth[0:4]   # 出生年份
            month = IDcard_birth[4:6]  # 出生月份
            day = IDcard_birth[6:8]    # 出生日

            # 出生日期的合法性檢查
            # 閏年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]
            # |[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
            # 平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]
            # |[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
            if (int(year) % 4 == 0 or (int(year) % 100 == 0 and int(year) % 4 == 0)):
                ereg = re.compile('[1-9][0-9]{5}((19[0-9]{2})|(20[0-1][0-8]))((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]'
                                  '|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))'
                                  '[0-9]{3}[0-9Xx]$')       # //閏年出生日期的合法性正則表達式
            else:
                ereg = re.compile('[1-9][0-9]{5}((19[0-9]{2})|(20[0-1][0-8]))((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]'
                                  '|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8])'
                                  ')[0-9]{3}[0-9Xx]$')      # //平年出生日期的合法性正則表達式
            # //測試出生日期的合法性
            if (re.match(ereg, IDcard)):
                IDcard_check = IDcard[17]  # 身份證最后一位
                W = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]   # 逐位權數
                IDcard_CHECK = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']  # 身份證檢驗位
                IDcard_sum = 0                                              # 定義累加和
                for i in range(0, 17):
                    IDcard_sum = IDcard_sum + int(IDcard[i]) * W[i]         # 逐位加權求和
                IDcard_Check = IDcard_sum % 11  # 取余數
                if IDcard_check != IDcard_CHECK[IDcard_Check]:              # 和檢驗位對比
                    var = '號碼:' + IDcard + '\n身份證號碼校驗錯誤!\n錯誤的身份證號碼\n'
                else:
                    if int(IDcard_sex) % 2 == 0:
                        var = "正確的身份證號碼! \n" + '號碼:' + IDcard + '\n地區(qū):' + area[IDcard[0: 2]] + \
                              '\n生日:' + year + '年' + month + '月' + day + '日' + "\n 性別:女\n"
                    else:

                        var = "正確的身份證號碼! \n" + '號碼:' + IDcard + '\n地區(qū):' + area[IDcard[0: 2]] + \
                              "\n生日: " + year + '年' + month + '月' + day + '日' + "\n性別:男 \n"
            else:
                var = '號碼:' + IDcard + '\n身份證號碼出生日期超出范圍或含有非法字符!\n錯誤的身份證號碼\n'
    t.insert('insert', var)       # 顯示輸出
    e.delete(0, 'end')

# 第6步,創(chuàng)建并放置兩個按鈕分別觸發(fā)兩種情況
b1 = tk.Button(window, text='檢查', width=10, height=2, command = check)
b1.place(x=550, y=80, anchor='nw')

# 第7步,創(chuàng)建并放置一個多行文本框text用以顯示
t = tk.Text(window, font=('宋體', 20), width=38, height=8)
t.place(x=100, y=210, anchor='nw')

# 第8步,主窗口循環(huán)顯示
window.mainloop() 

4 小結

該設計是一個身份證號驗證系統(tǒng),通過輸入身份證號,即可檢測出身份證號真假,并顯示出來。且每次自動刪除輸入框省份證號和上次的輸出結果,可重復檢測多個身份證號,主要設計的工作可概括如下:
1.初期對身份證號碼進行詳細分析,查閱有關資料并翻閱文獻,了解了身份證號每一位數字所對應的含義,然后進行數據分析,找出最佳算法。通過python實現了基本的功能。
2.在實現基本功能后,通過查找資料,在Python中用thinter函數實現了GUI界面,使我們更直觀的看出身份證所顯示的信息。

參考文獻

[1] Eric Matthes,Python編程從入門到實踐[M].北京: 人名郵電出版社,2012.8.
[2] 嚴蔚敏,吳偉民,數據結構[M].北京: 清華大學出版社,2004.1.
[3] 身份證上的號碼代表啥[J].時代主人,2016(03):29.
[4] 文豐,陳景勝.身份證號里為什么有X[J].應用寫作,2013(01):27.
[5] 新一代身份證小知識[J].湖南農機,2012(10):39.
[6] 閆治良,王宇晨.利用Excel函數判斷學生身份證信息的準確性[J].電腦編程技巧與維護,2016(03):47-48.

到此這篇關于Python實現身份證號碼驗證的示例代碼的文章就介紹到這了,更多相關Python 身份證號碼驗證內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python中安裝django模塊的方法

    python中安裝django模塊的方法

    這篇文章主要介紹了python中安裝django模塊的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • pytorch顯存一直變大的解決方案

    pytorch顯存一直變大的解決方案

    這篇文章主要介紹了pytorch顯存一直變大的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • python將天氣預報可視化

    python將天氣預報可視化

    大家好,本篇文章主要講的是python將天氣預報可視化,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • pytorch加載自己的數據集源碼分享

    pytorch加載自己的數據集源碼分享

    這篇文章主要介紹了pytorch加載自己的數據集源碼分享,標準的數據集流程梳理分為數據準備以及加載數據庫–>數據加載器的調用或者設計–>批量調用進行訓練或者其他作用,需要的朋友可以參考下
    2022-08-08
  • django的auth認證,authenticate和裝飾器功能詳解

    django的auth認證,authenticate和裝飾器功能詳解

    這篇文章主要介紹了django的auth認證,authenticate和裝飾器功能詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Django框架 信號調度原理解析

    Django框架 信號調度原理解析

    這篇文章主要介紹了Django框架 信號調度原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • gearman的安裝啟動及python API使用實例

    gearman的安裝啟動及python API使用實例

    這篇文章主要介紹了gearman的安裝啟動及python API使用,需要的朋友可以參考下
    2014-07-07
  • python實現計算圖形面積

    python實現計算圖形面積

    這篇文章主要為大家詳細介紹了python實現計算圖形面積,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • 如何正確理解python裝飾器

    如何正確理解python裝飾器

    裝飾器(Decorators)是 Python 的一個重要部分。簡單地說:他們是修改其他函數的功能的函數。他們有助于讓我們的代碼更簡短
    2021-06-06
  • Django自帶的加密算法及加密模塊詳解

    Django自帶的加密算法及加密模塊詳解

    今天小編就為大家分享一篇Django自帶的加密算法及加密模塊詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評論