proc random_uid {sex} { set ret "" set wgt 0 set cityList {A B C D E F G H J K L M N P Q R S T U V X Y W Z I O} set city [lpick $cityList] append ret $city set cityNum [expr [lsearch $cityList $city] + 10] set rndNum "$sex[expr {int(rand()*9000000+1000000)}]" append ret $rndNum set wgt [expr [expr [string index $cityNum 0] * 1] + [expr [string index $cityNum 1] * 9] ] set j 8 for {set i 0} {$i<8} {incr i} { set wgt [expr $wgt + [expr [string index $rndNum $i ] * $j]] incr j -1 } set chk [expr 10 - ($wgt % 10)] if {$chk == 10} {set chk 0} append ret $chk return $ret }
We are the Priests of the Temples of Syrinx, our great computers fill the hallowed halls.
2010-03-30
Tcl 隨機產生身份證字號
平常都是用 javascript 或 php 檢查身分證號碼,想不到有一天會需要用到身分證號產生器 XD 規則網路上很多,用 tcl 寫也沒幾行。
訂閱:
張貼留言 (Atom)
好像少了lpick :
回覆刪除proc lpick {L} {lindex $L [expr int(rand()*[llength $L])]}
-1的動作我比較愛用:
set j 100001
puts [time {incr j -1} 10000]
;#0.7132 microseconds per iteration
puts [time {set j [expr $j -1]} 10000]
;#5.1285 microseconds per iteration
expr我也喜歡這樣用:
set wgt 17
puts [time {expr 10 - ($wgt % 10) } 10000]
;#4.9517 microseconds per iteration
puts [time {expr 10 - [expr $wgt % 10] } 10000]
;#7.6521 microseconds per iteration
還是學長厲害! 馬上改。最近寫個小程式發現很多有趣的事,下次見面再跟你說 XD
回覆刪除沒有比較利害啦!!
回覆刪除只是寫久了就比較會注意這些 哈哈