明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1074|回复: 15

[源码] 分享一个生成随机字符串的源码

  [复制链接]
发表于 2024-10-30 16:20:34 | 显示全部楼层 |阅读模式
本帖最后由 baitang36 于 2024-10-30 16:22 编辑

  1. (DEFUN make_rnd_string (/ lvar0  lvar1 lvar2 lvar3 lvar4  lvar5 lvar6
  2.       lvar7 lvar8 lvar9)

  3.   (setq  lvar1
  4.    (LIST "{" "}" "~" "[" "]" "_" "^" "*" "$" ":" "#" "@")
  5.   )
  6.   (setq  lvar2
  7.    (LIST "s"   "t"   "u"   "1"   "2"   "3"   "4"   "5"   "6"
  8.          "?"   "#"   "@"   "["   "]"   "_"   "^"   "{"   "}"
  9.          "r"   "x"   "y"   "h"   "i"   "w"   "c"   "d"   "k"
  10.          "~"   "*"   "$"   ":"   "l"   "m"   "v"   "g"   "q"
  11.          "p"   "z"   "n"   "o"   "a"   "e"   "f"   "j"   "b"
  12.          "7"   "8"   "9"   "0"
  13.         )
  14.   )
  15.   (setq  lvar8 (list "j"    "b"  "s"   "w"   "c"    "d"  "k"   "p"
  16.         "z"    "n"  "l"   "m"   "t"    "u"  "h"   "i"
  17.         "v"    "g"  "q"   "r"   "x"    "y"  "o"   "a"
  18.         "e"    "f"
  19.        )
  20.   )
  21.   (setq  lvar3 (rem (READ (SUBSTR (VL-STRING-SUBST
  22.            ""
  23.            "."
  24.            (RTOS (GETVAR "cputicks") 2 16)
  25.          )
  26.          12
  27.          2
  28.        )
  29.        )
  30.        12
  31.         )
  32.   )


  33.   (setq  lvar4 (rem (READ (SUBSTR (VL-STRING-SUBST
  34.            ""
  35.            "."
  36.            (RTOS (GETVAR "cputicks") 2 16)
  37.          )
  38.          12
  39.          2
  40.        )
  41.        )
  42.        48
  43.         )
  44.   )

  45.   (setq  lvar5 (rem (READ (SUBSTR (VL-STRING-SUBST
  46.            ""
  47.            "."
  48.            (RTOS (GETVAR "cputicks") 2 16)
  49.          )
  50.          12
  51.          2
  52.        )
  53.        )
  54.        48
  55.         )
  56.   )

  57.   (setq  lvar6 (rem (READ (SUBSTR (VL-STRING-SUBST
  58.            ""
  59.            "."
  60.            (RTOS (GETVAR "cputicks") 2 16)
  61.          )
  62.          12
  63.          2
  64.        )
  65.        )
  66.        48
  67.         )
  68.   )

  69.   (setq lvar0 (rem (/ (getvar "millisecs") 10000) 26))
  70.   (setq lvar9 (rem (getvar "millisecs") 26))
  71.   (if (= nil lvar3)
  72.     (setq lvar3 1)
  73.   )
  74.   (if (= nil lvar4)
  75.     (setq lvar4 2)
  76.   )
  77.   (if (= nil lvar5)
  78.     (setq lvar5 3)
  79.   )
  80.   (if (= nil lvar6)
  81.     (setq lvar6 4)
  82.   )

  83.   (setq  lvar7
  84.    (STRCAT
  85.      (NTH lvar0 lvar8)
  86.      (NTH lvar3 lvar1)
  87.      (NTH lvar4 lvar2)
  88.      (NTH lvar5 lvar2)
  89.      (NTH lvar6 lvar2)
  90.      (NTH lvar9 lvar8)
  91.    )
  92.   )
  93.   (if (VL-POSITION
  94.   lvar7
  95.   rnd_string_list
  96.       )
  97.     (PROGN (setq lvar7 (make_rnd_string)))
  98.     (PROGN (setq rnd_string_list
  99.       (CONS
  100.         lvar7
  101.         rnd_string_list
  102.       )
  103.      )
  104.      lvar7
  105.     )

  106.   )
  107. )

  108. (DEFUN make_rnd_string12 ()
  109.   (strcat (make_rnd_string) (make_rnd_string))
  110. )
  111. ;rnd_string_list 是全局变量,保存已有的字符串,防止重复


用法:加载后(make_rnd_string)生成一个6字节字符串。
(make_rnd_string12)生成12字节字符串

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 6明经币 +6 收起 理由
Bao_lai + 1 很给力!
magicheno + 1 很给力!
yanshengjiang + 1
tryhi + 1 神马都是浮云
hubeiwdlue + 1 很给力!
ssyfeng + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-10-31 19:00:53 | 显示全部楼层

要感谢盛老师分享,如果有更好的可以发出来,也是个思路,倒不必这样说。
回复 支持 1 反对 0

使用道具 举报

发表于 2024-10-31 15:58:42 | 显示全部楼层
本帖最后由 kozmosovia 于 2024-10-31 16:55 编辑

不算随机数的生成随机字符串
  1. (Defun RandomStr (len / _Core IDX PWD RTN TXT)
  2.   (Defun _Core ()
  3.     ;;;; GUID只保留数字
  4.     (vl-list->string
  5.       (vl-remove-if-not
  6.   (function (lambda (x) (< 47 x 58)))
  7.   (vl-string->list
  8.     (vlax-get (vlax-create-object "Scriptlet.TypeLib") "GUID")
  9.   )
  10.       )
  11.     )
  12.   )
  13.   ;;; 生成ASCII=48~122的所有字符
  14.   (setq idx 47)
  15.   (while (<= (setq idx (1+ idx)) 122)
  16.     (setq pwd (cons (chr idx) pwd))
  17.   )
  18.   ;;; 去除不需要的特殊字符
  19.   (foreach abc '("/" "[" "]" "=" ":" ";" "`" "^" "\" "?" ">" "<" "@")
  20.     (setq pwd (vl-remove abc pwd))
  21.   )
  22.   (setq  idx (length pwd)
  23.   txt (_Core)
  24.   rtn ""
  25.   )
  26.   ;;;  利用GUID创建长度为(4*指定长度)的数字字符串
  27.   (while (< (strlen txt) (* 4 len))
  28.     (setq txt (strcat txt (_Core)))
  29.   )
  30.   (repeat len
  31.     ;;;每4个数字转成<9999的整数对字符表长度取模,根据模数据提取对应的字符
  32.     (setq rtn (strcat rtn
  33.           (nth (rem (atoi (substr txt 1 4)) idx)
  34.          pwd
  35.           )
  36.         )
  37.     txt (substr txt 5)
  38.     )
  39.   )
  40.   rtn
  41. )
  42. (repeat 11 (princ (strcat "\n " (RandomStr 20))))

 楼主| 发表于 2024-10-31 15:12:38 | 显示全部楼层
本帖最后由 baitang36 于 2024-10-31 15:19 编辑

你没仔细看程序,第一个字母是每10秒换一次,第6个字符是1毫秒换一次。这是故意这么做的。
发布源码的目的是授人以渔,代码本身没多少技术含量,喜欢的人可以随意改,不喜欢无视即可。
你可以随意改自己不满意的地方。
猫老师也写过这个,代码如果发出来会吓着你的。
tryhi问为什么重复的内容不改成一个函数,也是为了这个,你可以随意去修改它。

点评

可控的随机,真随机  发表于 2024-10-31 19:49
发表于 2024-10-30 16:29:31 | 显示全部楼层
感谢大佬分享
发表于 2024-10-30 16:38:47 | 显示全部楼层
是否有实例?
发表于 2024-10-30 16:41:07 | 显示全部楼层
发表于 2024-10-30 16:43:46 | 显示全部楼层
我顶顶顶顶顶一下
发表于 2024-10-30 16:47:07 | 显示全部楼层
lvar3、lvar4、lvar5、lvar6都是一样的代码,怎么不用一个函数
发表于 2024-10-30 16:48:07 | 显示全部楼层
谢谢盛老师分享。
 楼主| 发表于 2024-10-30 21:56:20 | 显示全部楼层
tryhi 发表于 2024-10-30 16:47
lvar3、lvar4、lvar5、lvar6都是一样的代码,怎么不用一个函数

为改起来方便
 楼主| 发表于 2024-10-30 21:59:25 | 显示全部楼层
kozmosovia 发表于 2024-10-30 16:41
不如leemac版本
https://lee-mac.com/password.html

研究一下lm的优点,加到这个代码里面?
发表于 2024-10-31 07:12:28 | 显示全部楼层
盛老师,给一个demo呀~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-22 20:19 , Processed in 0.236780 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表