gpt4 book ai didi

python - 身份证号码生成器

转载 作者:可可西里 更新时间:2023-11-01 10:31:23 26 4
gpt4 key购买 nike

所以基本上我得到了一个任务来创建一个生成器,该生成器将为我所在国家/地区的公民生成有效的身份证号码。一个有效数字是 9 位数字,对于每个数字,您需要根据索引将其乘以 1 或 2,如果索引是偶数,则将 num 乘以 1,否则乘以 2。之后,如果窗帘数字变得大于 9,则将其更改为其数字的总和。如果总和 % 10 == 0 那么 num 是有效的。否则为假。

之后,他们希望我创建一个类来生成迭代器。在 next 方法中:如果给定的数字有效,则将其返回并乘以 2 加 1,然后再次检查是否有效,如果无效则乘以 2 加 2,依此类推。如果从一开始数字就无效,则乘以 2 并加 1,然后乘以 2 并加 2,依此类推...

import string
letters = string.ascii_letters
digits = string.digits


class NumNotNineLong(Exception):

def __init__(self):
pass
def __str__(self):
return "The number you provided is not nine digits long."

class NotNumber(Exception):

def __init__(self):
pass

def __str__(self):
return "The input you provided is not an integer"

class IDIterator():

increment = 1

def __init__(self,_id):
self._id = _id

def __iter__(self):
return self

def __next__(self):

while check_id_valid(str(self._id)[-9::]) == False:
self._id *= 2
self._id += IDIterator.increment
IDIterator.increment += 1
if check_id_valid(str(self._id)[-9::]):
result = str(self._id)[-9::]
self._id *= 2
self._id += 1
IDIterator.increment = 2
return result



def check_id_valid(id_number):
for letter in str(id_number):
if letter not in string.digits:
raise NotNumber
numbers = [int(i) for i in str(id_number)]
if len(numbers) != 9:
raise NumNotNineLong
set_numbers = []
for i in range(len(numbers)):
if i % 2 == 0:
set_numbers.append(numbers[i])
else:
set_numbers.append(numbers[i] * 2)
true_numbers = []
for num in set_numbers:
if num > 9:
temp = [int(i) for i in str(num)]
true_numbers.append(sum(temp))
else:
true_numbers.append(num)
if sum(true_numbers) % 10 == 0:
return True
else:
return False


def main():
result = IDIterator(123456780)
for _ in range(10):
print(result.__next__())




if __name__ == "__main__":
main()

我的结果是:

209872373
274495985
097983944
391935780
903409134
227273083
545477432
363819467
910555747
409086964

想要的结果是:

209872373
863664504
569826803
339640302
473959864
544578024
356624288
466187762
040830960
487293938

救救我

谢谢!

最佳答案

我对这个问题的看法:

class IDIterator:
def __init__(self, num):
self.__num = num

def __iter__(self):
n, num = 1, self.__num
while True:
num = int( str(num)[-9:] )
if is_valid(num):
yield '{:0>9}'.format(num)
num *= 2
num += n
n = 1
else:
num *= 2
num += n
n += 1

def is_valid(num):
s = '{:0>9}'.format(num)

if len(s) != 9:
return False

nums = [int(ch) * 2 if i % 2 else int(ch) for i, ch in enumerate(s)]
nums = [sum(int(c) for c in str(n)) for n in nums]
return sum(nums) % 10 == 0

from itertools import islice

for num in islice(IDIterator(123456780), 0, 10):
print(num)

打印:

209872373
863664504
569826803
339640302
473959864
544578024
356624288
466187762
040830960
487293938

关于python - 身份证号码生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57451707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com