Here is a very old script that I posted over on the kixforms forum 15 years ago. I'm sure some of the code could be extremely optimized by now, and I had to change some frames to group boxes to get it to display right, but it still works! haha

 Code:
;;;;;; ------------------------------------------------------------------------------------------------ 
;;;;;;   Description   :   Used to generate passwords.  Password will always contain a number. 
;;;;;;            Password will also always contain a special character if one is chosen. 
;;;;;;            Password will not contain L,l,I,i,0,O,o, as these are hard to read/enter. 
;;;;;;   Dependencies   :   KiX 4.10.0.0 or WKiX 4.11.0.0 and KiXForms 2.2.0.37 
;;;;;; ------------------------------------------------------------------------------------------------ 

Break On 

$Form = CreateObject("Kixtart.Form") 

; ------------------------------------------------------------------------------- 
;                                              Draw Form 
; ------------------------------------------------------------------------------- 
PopulateSetting() 

$Form.Width = 450 
$Form.Height = 170 
$Form.Caption = "Generate A Password" 
$Form.Backcolor = $form.rgb(180,200,180) 

$SpecialFrame = $Form.GroupBox("Special Chars") 
$SpecialFrame.Left = 5 
$SpecialFrame.Top = 10 
$SpecialFrame.Width = 100 
$SpecialFrame.Height = 70 

$CheckBox1 = $SpecialFrame.CheckBox("#") 
$CheckBox1.Left = 10 
$CheckBox1.Top = 20
$CheckBox1.Height = 10
$CheckBox1.Width = 30
$CheckBox1.value = $LastUsedOption1 
$CheckBox1.ToolTip = "Include in password" 

$CheckBox2 = $SpecialFrame.CheckBox("*") 
$CheckBox2.Left = 10 
$CheckBox2.Top = 35 
$CheckBox2.Height = 10 
$CheckBox2.Width = 30
$CheckBox2.value = $LastUsedOption2 
$CheckBox2.ToolTip = "Include in password" 

$CheckBox3 = $SpecialFrame.CheckBox("@@") 
$CheckBox3.Left = 10 
$CheckBox3.Top = 50 
$CheckBox3.Height = 10 
$CheckBox3.Width = 30
$CheckBox3.value = $LastUsedOption3 
$CheckBox3.ToolTip = "Include in password" 

$CheckBox4 = $SpecialFrame.CheckBox("$$") 
$CheckBox4.Left = 60 
$CheckBox4.Top = 20 
$CheckBox4.Height = 10 
$CheckBox4.Width = 30
$CheckBox4.value = $LastUsedOption4 
$CheckBox4.ToolTip = "Include in password" 

$CheckBox5 = $SpecialFrame.CheckBox("&&") 
$CheckBox5.Left = 60 
$CheckBox5.Top = 35 
$CheckBox5.Height = 10 
$CheckBox5.Width = 30
$CheckBox5.value = $LastUsedOption5 
$CheckBox5.ToolTip = "Include in password" 

$CheckBox6 = $SpecialFrame.CheckBox("!") 
$CheckBox6.Left = 60 
$CheckBox6.Top = 50 
$CheckBox6.Height = 10 
$CheckBox6.Width = 30
$CheckBox6.value = $LastUsedOption6 
$CheckBox6.ToolTip = "Include in password" 

$LengthFrame = $Form.GroupBox("Length") 
$LengthFrame.Left = 120 
$LengthFrame.Top = 10 
$LengthFrame.Width = 100 
$LengthFrame.Height = 70 

$LengthBox = $LengthFrame.TextBox($LastUsedLength)
$LengthBox.Height = 20
$LengthBox.Width = 30
$LengthBox.Center
$LengthBox.Alignment = 2
$LengthBox.ToolTip = "Length of password"

$PasswordFrame = $Form.GroupBox("Password") 
$PasswordFrame.Left = 235 
$PasswordFrame.Top = 10 
$PasswordFrame.Width = 200 
$PasswordFrame.Height = 70 

$PasswordBox = $PasswordFrame.TextBox
$PasswordBox.Height = 20
$PasswordBox.Width = 120
$PasswordBox.Left = 20
$PasswordBox.Top = 25
$PasswordBox.Alignment = 2
$PasswordBox.ToolTip = "Password"

$CopyButton = $PasswordFrame.ToolButton
$CopyButton.Icon = 7
$CopyButton.Left = $PasswordBox.Right + 8
$CopyButton.Top = $PasswordBox.Top
$CopyButton.Height = 20
$CopyButton.Width = 25
$CopyButton.OnClick = "CopyPassword()"
$CopyButton.Enabled = 0
$CopyButton.Backcolor = $form.rgb(200,200,200)
$CopyButton.ToolTip = "Copy to clipboard"

$GenerateButton = $Form.ToolButton 
$GenerateButton.Caption = "Generate" 
$GenerateButton.Icon = 10 
$GenerateButton.Left = 100 
$GenerateButton.Top = 95 
$GenerateButton.Width = 100 
$GenerateButton.Height = 25 
$GenerateButton.OnClick = "Generate()" 
$GenerateButton.Backcolor = $form.rgb(200,200,200) 

$ExitButton = $Form.ToolButton 
$ExitButton.Caption = "Exit" 
$ExitButton.Icon = 9 
$ExitButton.Left = 250 
$ExitButton.Top = 95 
$ExitButton.Width = 100 
$ExitButton.Height = 25 
$ExitButton.OnClick = "Quit()" 
$ExitButton.Backcolor = $form.rgb(200,200,200) 

$Form.Center 
$Form.Show 
While $Form.Visible 
  $=Execute($Form.DoEvents()) 
Loop 
Exit 1 

; ------------------------------------------------------------------------------- 
;                                                UDFs 
; ------------------------------------------------------------------------------- 
FUNCTION PopulateSetting() 
   $LastUsedLength = ReadValue("HKEY_Current_User\Software\KiXtart\PWordGen", "Length") 
   $LastUsedOption1 = ReadValue("HKEY_Current_User\Software\KiXtart\PWordGen", "Option1") 
   $LastUsedOption2 = ReadValue("HKEY_Current_User\Software\KiXtart\PWordGen", "Option2") 
   $LastUsedOption3 = ReadValue("HKEY_Current_User\Software\KiXtart\PWordGen", "Option3") 
   $LastUsedOption4 = ReadValue("HKEY_Current_User\Software\KiXtart\PWordGen", "Option4") 
   $LastUsedOption5 = ReadValue("HKEY_Current_User\Software\KiXtart\PWordGen", "Option5") 
   $LastUsedOption6 = ReadValue("HKEY_Current_User\Software\KiXtart\PWordGen", "Option6") 
   if $LastUsedLength = "" $LastUsedLength = 6 endif 
   if $LastUsedOption1 = "" $LastUsedOption1 = 1 endif 
   if $LastUsedOption2 = "" $LastUsedOption2 = 1 endif 
   if $LastUsedOption3 = "" $LastUsedOption3 = 1 endif 
   if $LastUsedOption4 = "" $LastUsedOption4 = 1 endif 
   if $LastUsedOption5 = "" $LastUsedOption5 = 1 endif 
   if $LastUsedOption6 = "" $LastUsedOption6 = 1 endif 
ENDFUNCTION 

FUNCTION Generate()
   if $Checkbox1.value = "1" $option1 = "35" else $option1 = "0" endif 
   if $Checkbox2.value = "1" $option2 = "42" else $option2 = "0"  endif 
   if $Checkbox3.value = "1" $option3 = "64" else $option3 = "0"  endif 
   if $Checkbox4.value = "1" $option4 = "36" else $option4 = "0"  endif 
   if $Checkbox5.value = "1" $option5 = "38" else $option5 = "0"  endif 
   if $Checkbox6.value = "1" $option6 = "33" else $option6 = "0"  endif 
   while $specials=0 or $numbers=0 
      $length = $Lengthbox.text 
      $password = pword($length) 
      if Instr ($password, "1") OR 
      Instr ($password, "2") OR 
      Instr ($password, "3") OR 
      Instr ($password, "4") OR 
      Instr ($password, "5") OR 
      Instr ($password, "6") OR 
      Instr ($password, "7") OR 
      Instr ($password, "8") OR 
      Instr ($password, "9") 
         $numbers = 1 
      else 
         $numbers = 0 
      endif 
      if (len ($option1) > 1 AND Instr ($password, Chr($option1))) OR 
      (len ($option2) > 1 AND Instr ($password, Chr($option2))) OR 
      (len ($option3) > 1 AND Instr ($password, Chr($option3))) OR 
      (len ($option4) > 1 AND Instr ($password, Chr($option4))) OR 
      (len ($option5) > 1 AND Instr ($password, Chr($option5))) OR 
      (len ($option6) > 1 AND Instr ($password, Chr($option6))) 
         $specials = 1 
      else 
         $specials = 0 
      endif 
      if $option1=0 and $option2=0 and $option3=0 and $option4=0 and $option5=0 and $option6=0 
         $specials = 1 
      endif 
   loop 
   $PasswordBox.Text = $Password 
   $CopyButton.Enabled = 1 
   $numbers = 0 
   $specials = 0 
   $null = WriteValue ("HKEY_Current_User\Software\KiXtart\PWordGen", "Length", $length, "REG_SZ") 
   $null = WriteValue ("HKEY_Current_User\Software\KiXtart\PWordGen", "Option1", $Checkbox1.value, "REG_DWORD") 
   $null = WriteValue ("HKEY_Current_User\Software\KiXtart\PWordGen", "Option2", $Checkbox2.value, "REG_DWORD") 
   $null = WriteValue ("HKEY_Current_User\Software\KiXtart\PWordGen", "Option3", $Checkbox3.value, "REG_DWORD") 
   $null = WriteValue ("HKEY_Current_User\Software\KiXtart\PWordGen", "Option4", $Checkbox4.value, "REG_DWORD") 
   $null = WriteValue ("HKEY_Current_User\Software\KiXtart\PWordGen", "Option5", $Checkbox5.value, "REG_DWORD") 
   $null = WriteValue ("HKEY_Current_User\Software\KiXtart\PWordGen", "Option6", $Checkbox6.value, "REG_DWORD") 
ENDFUNCTION 

FUNCTION Pword($length) 
   dim $seed, $length, $i, $chr
   $seed = 5000
   $seedjump = 1000
   $length = val($length)
   for $i = 1 to $length
      $chr = random(33,126,$seed) $seed = $seed - $seedjump
         select
            case $i = 1
               while $chr >= 48 and $chr <=57
                  $chr = random(33,126,$seed) $seed = $seed + $seedjump
               loop
            case $i = $length
               while $chr >= 48 and $chr <=57
                  $chr = random(33,126,$seed) $seed = $seed - $seedjump
               loop
         endselect
      IF ($chr = $option1 OR $chr = $option2 OR $chr = $option3 OR $chr = $option4 OR $chr = $option5 OR $chr = $option6) OR
      (($chr >= 49 AND $chr <= 57) OR ($chr >= 65 AND $chr <= 72) OR ($chr >= 74 AND $chr <= 75) OR
      ($chr >= 77 AND $chr <= 78) OR ($chr >= 80 AND $chr <= 90) OR ($chr >= 97 AND $chr <= 104) OR
      ($chr >= 106 AND $chr <= 107) OR ($chr >= 109 AND $chr <= 110) OR ($chr >= 112 AND $chr <= 122))
         $pword = $pword + chr($chr)
      ELSE
         $i = LEN ($pword)
      ENDIF
   next
ENDFUNCTION

FUNCTION random($min, $max, optional $seed) 
   DIM $i, $burn, $nul 
   srnd((-1)*@ticks*(val($seed)+1)) 
   $burn = rnd(50) 
   for $i = 1 to $burn 
      $nul = rnd($max) 
   next 
   $random = rnd($max) 
   while $random < $min or $random > $max 
      $random = rnd($max)    
   loop    
ENDFUNCTION 

FUNCTION CopyPassword() 
   $PasswordBox.SelStart  = 0 
   $PasswordBox.SelLength = -1 
   $PasswordBox.Copy 
ENDFUNCTION


Edited by ShaneEP (2018-03-07 12:10 AM)
Edit Reason: Saw some variables in quotes and just couldn't take it...