2010-03-30

Tcl 隨機產生身份證字號

平常都是用 javascript 或 php 檢查身分證號碼,想不到有一天會需要用到身分證號產生器 XD 規則網路上很多,用 tcl 寫也沒幾行。 
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
}

1 則留言:

  1. 還是學長厲害! 馬上改。最近寫個小程式發現很多有趣的事,下次見面再跟你說 XD

    回覆刪除