Updated again to handle non-seeded calls better.

Code:
$i=udfpwgen(5,@TIME+"initialseedvalue")
$i=10
while $i
$i " " udfpwgen(10) ?
$i=$i-1
Loop

Function udfPWGen($iLength,Optional $sSeed)
Dim $sTerminal,$sNonTerminal,$iIndex,$iSeed

$sTerminal=$sTerminal+"BCDFGHJKLMNPQRSTVWXYZ"
$sTerminal=$sTerminal+"bcdfghjklmnpqrstvwxyz"
$sNonTerminal="0123456789"
If $sSeed<>""
For $iIndex=1 To Len($sSeed)
$iSeed=$iSeed*10+Asc(SubStr($sSeed,$iIndex,1))
Next
Srnd($iSeed)
; Discard first (not very random) value
$iIndex=Rnd(0)
EndIf
For $iIndex=1 to $iLength
$sSelectFrom=IIF($iIndex=1 OR $iIndex=$iLength,$sTerminal,$sTerminal+$sNonTerminal)
$udfPWGen=$udfPWGEn+Cstr(Substr($sSelectFrom,(Rnd(Len($sSelectFrom)-1)+1),1))
Next
EndFunction