那些隐藏了身份证号码的车票真的安全吗?

身份证上储存了太多的私人信息,大家一定要妥善保管。还有废弃的车票等其他看似隐藏了能够保护我们信息的数字,但都有可能是最后的“罪魁祸首“。虽然其他可能不是隐藏的这四位数字,但通过规律,也是能够得到的。所以笔者提醒大家,在网络上一定要将自己身份证号打上马赛克,不给不法分子有可乘之机。

身份证号码虽然独一无二,但其生成的规律确是固定的,仅仅通过公式便能确定一个身份证号码是否正确,反之也可以通过一个确定正确但不完整的身份证号码来反推完整信息。

身份证的组成部分相信大家都明白,其最重要的是最后一位校验码,而校验码的计算其实非常简单:

前17位数字每一个对应了一个系数,分别是7. 9 .10 .5. 8. 4. 2. 1. 6. 3. 7. 9. 10. 5. 8. 4. 2,将每一位数字与系数相乘得到的数加在一起除以11的余数一定在0-10以内。然后0 、1、 2、 3、 4、 5、 6、 7、 8、 9、 10这11个数字。其分别对应的最后一位身份证的号码为1 .0. X. 9. 8. 7. 6. 5. 4. 3. 2.,这样就得到自己的校验码。

如果硬算的话,几百次尝试之后就能得到结果,但学习python语言之后就能快速得到结果,下面是判断身份证是否正确和大致推算身份证号码的代码。

Python代码:判断身份证号是否真实

def ID_Card_judgment(ID_num):

list1 = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]

sums = 0

for i in range(len(list1)):

new_num = int(ID_num[i]) * list1[i]

sums += new_num

check_code = [1,0,"X",9,8,7,6,5,4,3,2]

num = sums % 11

if str(check_code[num]) == ID_num[-1]:

return "True"

else:

return "False"

大致推断完整身份证号码:

def ID_Card_calculation(ID_num):

if ID_num[-1] == "X":

new_ID_num = ID_num[:-1]+"10"

else:

new_ID_num = ID_num

a = new_ID_num.split("*")

new_ID_card = "".join(a)

front_code = [7,9,10,5,8,4,2,1,6,3,8,4,2] #除生日四位数其他数的参数

sums = 0

for i in range(len(front_code)): #len(new_ID_card) = 18-4-1 =13

nums = int(new_ID_card[i]) * front_code[i]

sums += nums

# print(sums) 除了生日四位数,其他数与对应参数乘积之和

#7,9,10,5 生日四位数的参数

duiying = [1,0,10,9,8,7,6,5,4,3,2]

times = 0

for a in range(0,2):

for b in range(0,10):

for c in range(0,4):

for d in range(0,10):

if (sums + (a*7 + b*9 + c*10 + d*5)) % 11 == duiying[int(new_ID_num[17:])]:

string = str(a)+str(b)+str(c)+str(d)

if 0 < int(string[0:2]) <= 12 and 0 < int(string[2:4]) <= 31:

times += 1

ID_Card_num = ID_num[0:10] + string + ID_num[14:18]

print(ID_Card_num)

print("共有%d种情况。"%times)

这个代码虽然不能精确的推断,但是所得的结果仅有二三十种,再通过现有的网络上一些平台,加上姓名和星座等等其他一些信息,轻松便能得到你的信息。

出于对安全的考虑和环保的要求才出现了现在正流行的电子车票吧!避免了车票丢失带来的风险。但是还是要注意避免身份信息在网络上的泄露。毕竟我们的信息都在网络上展示的清清楚楚!

### 使用Python实现车站验票功能 为了实现车站验票功能,可以构建一个基于Python的应用程序来模拟这一过程。此应用程序会涉及到读取车票信息、验证这些信息的有效性以及处理不同的异常情况。 考虑到实际应用中的复杂度,在这里简化模型以便于理解。假设每张电子车票由二维码组成,该二维码包含了乘客的身份信息(如身份证号)、座位编号、出发站名、到达站名以及其他必要的细节。验票机则负责扫描这个二维码,并将其解码成字符串形式的数据供后续分析使用[^1]。 对于本案例而言,重点在于如何利用现有的库完成上述任务而不是具体硬件交互部分: #### 1. 安装所需依赖项 首先安装所需的第三方包,例如`qrcode`用于生成测试用的QR Code图像文件;而`pyzbar`则是用来识别图片内的条形码/二维码内容。 ```bash pip install qrcode[pil] pyzbar ``` #### 2. 创建简单的车票类 定义一个Ticket类表示一张虚拟化的火车票对象,其中包含有基本属性比如ID, seat_number等字段。 ```python class Ticket: def __init__(self, id_, name, start_station, end_station, seat_no): self.id_ = id_ self.name = name self.start_station = start_station self.end_station = end_station self.seat_no = seat_no @property def info(self): return f"{self.id_},{self.name},{self.start_station}->{self.end_station},{self.seat_no}" ``` #### 3. 编写函数以创建并保存带有编码过后的票据详情至二维码图形中 下面这段代码展示了怎样把之前提到过的Ticket实例的信息转换成为可被机器读取的形式——即二维码图案。 ```python import qrcode def create_ticket_qr_code(ticket: Ticket, filename='ticket.png'): qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, ) qr.add_data(ticket.info) qr.make(fit=True) img = qr.make_image(fill_color="black", back_color="white") img.save(filename) ``` #### 4. 开发核心逻辑:检验给定路径下的二维码所代表之车票的真实性 最后一步就是编写main()方法或者其他入口点来进行整个流程控制,包括但不限于加载本地存储着二维码图样的PNG/JPEG文档作为输入源,调用PyZBar API获取到隐藏在其内部的文字串,再依据预设规则判断其合法性。 ```python from pyzbar.pyzbar import decode from PIL import Image def validate_ticket(qr_path): decoded_objects = decode(Image.open(qr_path)) if not decoded_objects: print('无法解析二维码') return False ticket_info_str = decoded_objects[0].data.decode('utf-8') try: _, _, route, _ = ticket_info_str.split(',') origin, destination = route.split('->') # 此处可以根据业务需求进一步扩展校验条件 valid_stations = ['北京', '上海'] # 示例有效站点列表 if all([origin.strip() in valid_stations, destination.strip() in valid_stations]): print(f'车次路线 {route} 合法.') return True raise ValueError() except Exception as e: print(f'错误发生:{str(e)}\n{qr_path} 中的内容不符合预期格式.') return False if __name__ == '__main__': test_ticket = Ticket(id_='T123456789', name='张三', start_station='北京', end_station='上海', seat_no='A1') create_ticket_qr_code(test_ticket) result = validate_ticket('./ticket.png') print('验票结果:', '成功!' if result else '失败!') ``` 以上就是一个非常基础版本的Python实现车站验票系统的例子[^2]。当然现实中还需要考虑更多因素,例如加密算法保障信息安全传输、数据库对接支持大规模并发请求等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值