Sarnold 2007-11-04 Here's a small proc called mix-word which mixes a word in a way it is not recognizable. I often use mixed-words in which letters are replaced by digits, as passwords, and mix-word quite produce interesting passwords.
#Usage : mix-word word ?digit-proba? ?uppercase-proba?
# word : the word to mix
# proba : a probability between 0.0 and 1.0
proc mix-word {word {digit 0.3} {upper 0.5}} {
foreach letter [split [string tolower $word] ""] {
append mixed [letter-case [random-match $letter $digit] $upper]
}
set mixed
}
proc random-match {char proba} {
if {rand()<$proba} {return [make-match $char]} {return $char}
}
proc letter-case {char upper} {
if {rand()<$upper} {return [string toupper $char]}
set char
}
proc make-match char {
array set matches [matches]
if {[info exists matches($char)]} {return $matches($char)}
return $char
}
proc matches {} {split a4b3c0d2e9f7g6h4i1j1k3l1m8o0q9r2s5t4v0x8y9z7 ""}See also Password Gorilla for a password manager application.