僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
出現頻度をもう少し詰めてみた。
ランダムな番号を一千個取り、
番号ごとに末尾一文字の違う番号を9個作り、
それぞれの「検査数字」を取って数える。
昨日のスクリプトをck.pyという名前で関数化する。
#!/usr/bin/env python import random def myrand(): random.seed() example = random.randint(10000000000, 99999999999) return example def checknum(number): numlist = [] for x in range(1,12): numlist.append( (number % (10**x))/(10**(x-1))) checkdigit = \ 11 - (\ numlist[0]*2 + \ numlist[1]*3 + \ numlist[2]*4 + \ numlist[3]*5 + \ numlist[4]*6 + \ numlist[5]*7 + \ numlist[6]*2 + \ numlist[7]*3 + \ numlist[8]*4 + \ numlist[9]*5 + \ numlist[10]*6) \ % 11 if checkdigit >= 10: checkdigit = 0 return checkdigit,numlist
#!/usr/bin/env python import ck all_list = [] for x in range(1000): randnum = ck.myrand() for y in range(-5,5): cnum , clist = ck.checknum(randnum + y) all_list.append(cnum) print len(all_list) for z in range(10): print z, all_list.count(z)
結果自体は昨日と同じようだ。
しかし、番号が一つしか違わない10の番号
の寄せ集め1000(合計1万)個のうち、
「検査用数字」の0が1800以上も出ているから
衝突している可能性が高いとは言える、かも。
$ python num_conf.py 10000 0 1856 1 951 2 898 3 911 4 902 5 876 6 935 7 871 8 935 9 865
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。