欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)身份證號(hào)碼驗(yàn)證的示例代碼

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

摘要: 該設(shè)計(jì)主要使用python語(yǔ)言來(lái)實(shí)現(xiàn)身份證號(hào)驗(yàn)證程序。它運(yùn)用 tkinter模塊生成GUI界面。當(dāng)用戶輸入身份證號(hào),按下檢查按鈕,即可判斷身份證號(hào)是否正確。該程序簡(jiǎn)潔,靈活,執(zhí)行效率高。
關(guān)鍵詞: 身份證號(hào); python;tkinter

1 概述

1.1背景

中華人民共和國(guó)居民身份證是國(guó)家法定的證明公民個(gè)人身份的有效證件。在當(dāng)今社會(huì),有一些不法分子為了躲避法律追捕,偽造身份證的現(xiàn)象也是很普遍的,為了驗(yàn)證公民的身份證號(hào)碼是否符合國(guó)家標(biāo)準(zhǔn),設(shè)計(jì)一個(gè)身份證號(hào)碼校驗(yàn)系統(tǒng)是有必要的。

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

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

1.3身份證號(hào)驗(yàn)證內(nèi)容

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

2 系統(tǒng)設(shè)計(jì)

2.1.功能模塊設(shè)計(jì)

該系統(tǒng)的主要功能是實(shí)現(xiàn)身份證號(hào)碼的驗(yàn)證,當(dāng)輸入身份證號(hào)碼時(shí),檢測(cè)身份證是否正確。

在這里插入圖片描述

2.1.1 GUI界面設(shè)計(jì)

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

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

GUI界面設(shè)計(jì)如圖所示:

在這里插入圖片描述

2.1.2 身份證號(hào)驗(yàn)證

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

在這里插入圖片描述

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

在這里插入圖片描述

閏年出生日期合法性判斷表達(dá)式:[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]$
閏年出生日期合法性判斷表達(dá)式:[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.最后一位檢驗(yàn)位驗(yàn)證: 采用逐位加權(quán)求和得出前17位分別與系數(shù)成績(jī)的之和。然后除以11取余數(shù),與相應(yīng)的檢驗(yàn)位對(duì)比,如果相等則輸出“正確的身份證號(hào)”;如果不相等,則輸出“身份證號(hào)碼校驗(yàn)錯(cuò)誤,錯(cuò)誤的身份證號(hào)”。如圖6和圖5。

在這里插入圖片描述

在這里插入圖片描述

2.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)

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

在這里插入圖片描述

2.3 函數(shù)功能描述

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

3 程序?qū)崿F(xiàn)

import tkinter as tk  # 使用Tkinter前需要先導(dǎo)入
import re

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

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

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

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

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

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


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

        area = {"11": "北京", "12": "天津", "13": "河北", "14": "山西", "15": "內(nèi)蒙古", "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": "臺(tái)灣", "81": "香港", "82": "澳門(mén)", "91": "國(guó)外"}

        # 地區(qū)校驗(yàn)
        if IDcard[0:2] not in area.keys():
            var = '號(hào)碼:' + IDcard + '\n身份證地區(qū)非法!\n錯(cuò)誤的身份證號(hào)碼\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]$')       # //閏年出生日期的合法性正則表達(dá)式
            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]$')      # //平年出生日期的合法性正則表達(dá)式
            # //測(cè)試出生日期的合法性
            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]   # 逐位權(quán)數(shù)
                IDcard_CHECK = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']  # 身份證檢驗(yàn)位
                IDcard_sum = 0                                              # 定義累加和
                for i in range(0, 17):
                    IDcard_sum = IDcard_sum + int(IDcard[i]) * W[i]         # 逐位加權(quán)求和
                IDcard_Check = IDcard_sum % 11  # 取余數(shù)
                if IDcard_check != IDcard_CHECK[IDcard_Check]:              # 和檢驗(yàn)位對(duì)比
                    var = '號(hào)碼:' + IDcard + '\n身份證號(hào)碼校驗(yàn)錯(cuò)誤!\n錯(cuò)誤的身份證號(hào)碼\n'
                else:
                    if int(IDcard_sex) % 2 == 0:
                        var = "正確的身份證號(hào)碼! \n" + '號(hào)碼:' + IDcard + '\n地區(qū):' + area[IDcard[0: 2]] + \
                              '\n生日:' + year + '年' + month + '月' + day + '日' + "\n 性別:女\n"
                    else:

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

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

# 第7步,創(chuàng)建并放置一個(gè)多行文本框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 小結(jié)

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

參考文獻(xiàn)

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

到此這篇關(guān)于Python實(shí)現(xiàn)身份證號(hào)碼驗(yàn)證的示例代碼的文章就介紹到這了,更多相關(guān)Python 身份證號(hào)碼驗(yàn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python中安裝django模塊的方法

    python中安裝django模塊的方法

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

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

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

    python將天氣預(yù)報(bào)可視化

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

    pytorch加載自己的數(shù)據(jù)集源碼分享

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

    django的auth認(rèn)證,authenticate和裝飾器功能詳解

    這篇文章主要介紹了django的auth認(rèn)證,authenticate和裝飾器功能詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Django框架 信號(hào)調(diào)度原理解析

    Django框架 信號(hào)調(diào)度原理解析

    這篇文章主要介紹了Django框架 信號(hào)調(diào)度原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • gearman的安裝啟動(dòng)及python API使用實(shí)例

    gearman的安裝啟動(dòng)及python API使用實(shí)例

    這篇文章主要介紹了gearman的安裝啟動(dòng)及python API使用,需要的朋友可以參考下
    2014-07-07
  • python實(shí)現(xiàn)計(jì)算圖形面積

    python實(shí)現(xiàn)計(jì)算圖形面積

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

    如何正確理解python裝飾器

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

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

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

最新評(píng)論