使用python计算身份证号码(time模块和datetime模块)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44205272/article/details/102730263

本文章需要的使用到time模块,故先从time模块和datetime模块讲起.

python之time模块

需要注意的是在time模块中的大多数函数是调用了所在平台C library的同名函数, 所以要特别注意有些函数是平台相关的,可能会在不同的平台有不同的效果。另外一点是,由于是基于Unix Timestamp,所以其所能表述的日期范围被限定在 1970 – 2038 之间,如果你写的代码需要处理在前面所述范围之外的日期,那可能需要考虑使用另一个Python时间模块,datetime模块更好

time模块中时间表现的三种格式
  • 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。返回的是flot类型的数字。产生时间戳方式的函数主要有time(),clock()等。
  • 格式化的时间字符串(Format String)
  • 结构化的时间(struct_time):struct_time是一个元组类型,共有9个元素共九个元素(见下表),而gmtime(),localtime(),strptime()这几个函数返回的都是struct_time类型

其中struct_time的主要元素如下,元素值可以通过索引和属性名直接获取

index Attribute Values
0 tm_year(4位数年) (for example, 1993)
1 tm_mon(月) range [1, 12]
2 tm_mday(日) range [1, 31]
3 tm_hour(小时) range [0,23]
4 ttm_min(分钟) range [0, 59]
5 tm_wday (一周第几天) range [0, 6], Monday is 0
6 tm_yday(一年第几天) range [1, 366]
import time
print(time.gmtime())
print(time.localtime())
print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X'))

# 输出如下:
# time.struct_time(tm_year=2019, tm_mon=10, tm_mday=24, tm_hour=11, tm_min=53, tm_sec=8, tm_wday=3, tm_yday=297, tm_isdst=0)
# time.struct_time(tm_year=2019, tm_mon=10, tm_mday=24, tm_hour=19, tm_min=53, tm_sec=8, tm_wday=3, tm_yday=297, tm_isdst=0)
# time.struct_time(tm_year=2019, tm_mon=10, tm_mday=24, tm_hour=19, tm_min=37, tm_sec=6, tm_wday=3, tm_yday=297, tm_isdst=-1)
  • time() 返回当前时间的一个时间戳。

  • sleep() 线程将推迟指定的时间后运行,单位为秒。其精度为亚秒级。

  • ctime() 将一个时间戳(默认为当前时间)转换成一个时间字符串。

  • localtime() 将一个时间戳转化为当前地区的一个struct_time()类型元组,未设置默认为当前时间。

  • gmtime() gmtime()与localtime类似,不过返回的UTC世界标准时间。

  • mktime() 将一个strut_time 转化为时间戳。

  • clock() 返回的是程序进程运行时间。

  • asctime() 把一个代表时间的元组或者struct_time类型元组,转换为类似Thu Mar 21 15:05:36 2019这样的形式。

  • strptime(‘2011-05-05 16:37:06’, ‘%Y-%m-%d %X’) 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。

  • strftime(’%Y-%m-%d %X’, (2009, 2, 17, 17, 3, 38, 1, 48, 0)) 把一个代表时间的元组或者struct_time类型元组转化为格式化的时间字符串。

print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
# 结果:
# 2019-10-24 20:01:08

在这里插入图片描述

python之datetime模块

datetime.datetime类
  • datetime.datetime.now():返回系统当前时间

  • datetime.datetime.now().date():返回当前时间的日期

  • datetime.datetime.now().time():返回当前时间的时分秒

  • datetime.datetime.ctime():将datetime.datetime类型转化成str类型

import datetime
print(datetime.datetime.now())
print(datetime.datetime.now().date())
print(datetime.datetime.now().time())
print(datetime.datetime.now().ctime())

'''
2019-10-24 20:18:15.144694
2019-10-24
20:18:15.144694
Thu Oct 24 20:18:15 2019
'''

接下来我便利用四位生日推测出身份证号码

在这里插入图片描述

我们可以先生成某年份的所有日期(例如1995年)
import time
# 生成出生当年所有日期
def dateRange(year):
    format = '%Y-%m-%d'
    # 将格式化的字符串时间转化为struct_time再转化成时间戳
    begin = int(time.mktime(time.strptime(year+'-01-01',format)))
    end = int(time.mktime(time.strptime(year+'-12-31',format)))
    # 将时间戳转化成struct_time再转化成格式化字符串时间
    list_date = [time.strftime(format,time.localtime(i)) for i in range(begin,end+1,3600*24)]
    return [i.replace('-','') for i in list_date]
data_time  = dateRange('1995')
print(data_time)
我们利用 id-validator 来依次校验刚才生成的身份证号码
from id_validator import validato
#遍历所有日期,print通过校验的身份证号码
def vali_dator(id1,id2,id3):
    for i in dateRange(id2):
        theid = id1 + i + id3
        if validator.is_valid(theid):
            print(theid)
vali_dator('532301','1995','1512')

猜你喜欢

转载自blog.csdn.net/qq_44205272/article/details/102730263