strings.go 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. package yu_rand
  2. // S09
  3. //
  4. // @Description: 生成 0-9 的随机字符串
  5. func S09[T int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | int | uint | uintptr](len T) string {
  6. return string(BytesEx(len, 10, '0'))
  7. }
  8. // Saz
  9. //
  10. // @Description: 生成 a-z 的随机字符串
  11. func Saz[T int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | int | uint | uintptr](len T) string {
  12. return string(BytesEx(len, 26, 'a'))
  13. }
  14. // SAZ
  15. //
  16. // @Description: 生成 A-Z 的随机字符串
  17. func SAZ[T int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | int | uint | uintptr](len T) string {
  18. return string(BytesEx(len, 26, 'A'))
  19. }
  20. // SaZ
  21. //
  22. // @Description: 生成 a-z、A-Z 中的随机字符串
  23. func SaZ[T int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | int | uint | uintptr](len T) string {
  24. if len <= 0 {
  25. panic("len必须是正数")
  26. }
  27. bytes := make([]byte, len)
  28. var i T
  29. for ; i < len; i++ {
  30. if Int31n(2) == 0 {
  31. bytes[i] = byte(Int31n(26)) + 'a'
  32. } else {
  33. bytes[i] = byte(Int31n(26)) + 'A'
  34. }
  35. }
  36. return string(bytes)
  37. }
  38. // S0az
  39. //
  40. // @Description: 生成 0-9、a-z 中的随机字符串
  41. func S0az[T int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | int | uint | uintptr](len T) string {
  42. if len <= 0 {
  43. panic("len必须是正数")
  44. }
  45. bytes := make([]byte, len)
  46. var i T
  47. for ; i < len; i++ {
  48. if Int31n(2) == 0 {
  49. bytes[i] = byte(Int31n(10)) + '0'
  50. } else {
  51. bytes[i] = byte(Int31n(26)) + 'a'
  52. }
  53. }
  54. return string(bytes)
  55. }
  56. // S0AZ
  57. //
  58. // @Description: 生成 0-9、A-Z 中的随机字符串
  59. func S0AZ[T int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | int | uint | uintptr](len T) string {
  60. if len <= 0 {
  61. panic("len必须是正数")
  62. }
  63. bytes := make([]byte, len)
  64. var i T
  65. for ; i < len; i++ {
  66. if Int31n(2) == 0 {
  67. bytes[i] = byte(Int31n(10)) + '0'
  68. } else {
  69. bytes[i] = byte(Int31n(26)) + 'A'
  70. }
  71. }
  72. return string(bytes)
  73. }
  74. // S0aZ
  75. //
  76. // @Description: 生成 0-9、a-z、A-Z 中的随机字符串
  77. func S0aZ[T int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | int | uint | uintptr](len T) string {
  78. if len <= 0 {
  79. panic("len必须是正数")
  80. }
  81. bytes := make([]byte, len)
  82. var i T
  83. for ; i < len; i++ {
  84. switch Int31n(3) {
  85. case 0:
  86. bytes[i] = byte(Int31n(10)) + '0'
  87. case 1:
  88. bytes[i] = byte(Int31n(26)) + 'a'
  89. default:
  90. bytes[i] = byte(Int31n(26)) + 'A'
  91. }
  92. }
  93. return string(bytes)
  94. }
  95. const str_other = "`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/?"
  96. const str_other_len = int32(len(str_other))
  97. // S_
  98. //
  99. // @Description: 生成 【`~!@#$%^&*()-_=+[{]}\|;:'",<.>/?】 中的随机字符串
  100. func S_[T int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | int | uint | uintptr](len T) string {
  101. bytes := make([]byte, len)
  102. var i T
  103. for ; i < len; i++ {
  104. bytes[i] = str_other[Int31n(str_other_len)]
  105. }
  106. return string(bytes)
  107. }
  108. // SEx
  109. //
  110. // @Description: 生成 0-9、a-z、A-Z、各种符号 中的随机字符串
  111. func SEx[T int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | int | uint | uintptr](len T) string {
  112. bytes := make([]byte, len)
  113. var i T
  114. for ; i < len; i++ {
  115. bytes[i] = byte(Int31n(94)) + 33 // 33 - 126
  116. }
  117. return string(bytes)
  118. }
  119. // 汉字的 Unicode 编码范围为 \u4E00-\u9FCB \uF900-\uFA2D,如果不在这个范围内就不是汉字。
  120. // 字符集 字数 Unicode 编码
  121. // 基本汉字 20902字 4E00-9FA5
  122. // 基本汉字补充 90字 9FA6-9FFF
  123. // 扩展A 6592字 3400-4DBF
  124. // 扩展B 42720字 20000-2A6DF
  125. // 扩展C 4154字 2A700-2B739
  126. // 扩展D 222字 2B740-2B81D
  127. // 扩展E 5762字 2B820-2CEA1
  128. // 扩展F 7473字 2CEB0-2EBE0
  129. // 扩展G 4939字 30000-3134A
  130. // 扩展H 4192字 31350-323AF
  131. // 康熙部首 214字 2F00-2FD5
  132. // 部首扩展 115字① 2E80-2EF3
  133. // 兼容汉字 472字② F900-FAD9
  134. // 兼容扩展 542字 2F800-2FA1D
  135. // 汉字笔画 36字 31C0-31E3
  136. // 汉字结构 12字 2FF0-2FFB
  137. // 汉语注音 43字 3105-312F
  138. // 注音扩展 32字 31A0-31BF
  139. // 〇 1字 3007
  140. // Unicode 版本:15.0
  141. //
  142. // 字数备注:
  143. // ① 部首扩展:2E9A 是空码位。
  144. // ② 兼容汉字:FA6E、FA6F 是空码位。
  145. const (
  146. cn_start = 0x4E00
  147. cn_end = 0x9FFF
  148. cn_interval = cn_end - cn_start
  149. )
  150. // SCn
  151. //
  152. // @Description: 生成 汉字 随机字符串
  153. func SCn[T int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | int | uint | uintptr](len T) string {
  154. bytes := make([]rune, len)
  155. var i T
  156. for ; i < len; i++ {
  157. bytes[i] = rune(Intn(cn_interval) + cn_start)
  158. }
  159. return string(bytes)
  160. }
  161. var 百家姓 = []string{
  162. "赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚", "卫", "蒋",
  163. "沈", "韩", "杨", "朱", "秦", "尤", "许", "何", "吕", "施", "张", "孔", "曹", "严", "华", "金", "魏",
  164. "陶", "姜", "戚", "谢", "邹", "喻", "柏", "水", "窦", "章", "云", "苏", "潘", "葛", "奚", "范", "彭",
  165. "郎", "鲁", "韦", "昌", "马", "苗", "凤", "花", "方", "任", "袁", "柳", "鲍", "史", "唐", "费", "薛",
  166. "雷", "贺", "倪", "汤", "滕", "殷", "罗", "毕", "郝", "安", "常", "傅", "卞", "齐", "元", "顾", "孟",
  167. "平", "黄", "穆", "萧", "尹", "姚", "邵", "湛", "汪", "祁", "毛", "狄", "米", "伏", "成", "戴", "谈",
  168. "宋", "茅", "庞", "熊", "纪", "舒", "屈", "项", "祝", "董", "梁", "杜", "阮", "蓝", "闵", "季", "贾",
  169. "路", "娄", "江", "童", "颜", "郭", "梅", "盛", "林", "钟", "徐", "邱", "骆", "高", "夏", "蔡", "田",
  170. "樊", "胡", "凌", "霍", "虞", "万", "支", "柯", "管", "卢", "莫", "柯", "房", "裘", "缪", "解", "应",
  171. "宗", "丁", "宣", "邓", "单", "杭", "洪", "包", "诸", "左", "石", "崔", "吉", "龚", "程", "嵇", "邢",
  172. "裴", "陆", "荣", "翁", "荀", "于", "惠", "甄", "曲", "封", "储", "仲", "伊", "宁", "仇", "甘", "武",
  173. "符", "刘", "景", "詹", "龙", "叶", "幸", "司", "黎", "溥", "印", "怀", "蒲", "邰", "从", "索", "赖",
  174. "卓", "屠", "池", "乔", "胥", "闻", "莘", "党", "翟", "谭", "贡", "劳", "逄", "姬", "申", "扶", "堵",
  175. "冉", "宰", "雍", "桑", "寿", "通", "燕", "浦", "尚", "农", "温", "别", "庄", "晏", "柴", "瞿", "阎",
  176. "连", "习", "容", "向", "古", "易", "廖", "庾", "终", "步", "都", "耿", "满", "弘", "匡", "国", "文",
  177. "寇", "广", "禄", "阙", "东", "欧", "利", "师", "巩", "聂", "关", "荆", "司马", "上官", "欧阳", "夏侯",
  178. "诸葛", "闻人", "东方", "赫连", "皇甫", "尉迟", "公羊", "澹台", "公冶", "宗政", "濮阳", "淳于", "单于",
  179. "太叔", "申屠", "公孙", "仲孙", "轩辕", "令狐", "徐离", "宇文", "长孙", "慕容", "司徒", "司空",
  180. }
  181. var 名 = []string{
  182. "伟", "刚", "勇", "毅", "俊", "峰", "强", "军", "平", "保", "东", "文", "辉", "力", "明", "永", "健", "世", "广", "志", "义",
  183. "兴", "良", "海", "山", "仁", "波", "宁", "贵", "福", "生", "龙", "元", "全", "国", "胜", "学", "祥", "才", "发", "武", "新",
  184. "利", "清", "飞", "彬", "富", "顺", "信", "子", "杰", "涛", "昌", "成", "康", "星", "光", "天", "达", "安", "岩", "中", "茂",
  185. "进", "林", "有", "坚", "和", "彪", "博", "诚", "先", "敬", "震", "振", "壮", "会", "思", "群", "豪", "心", "邦", "承", "乐",
  186. "绍", "功", "松", "善", "厚", "庆", "磊", "民", "友", "裕", "河", "哲", "江", "超", "浩", "亮", "政", "谦", "亨", "奇", "固",
  187. "之", "轮", "翰", "朗", "伯", "宏", "言", "若", "鸣", "朋", "斌", "梁", "栋", "维", "启", "克", "伦", "翔", "旭", "鹏", "泽",
  188. "晨", "辰", "士", "以", "建", "家", "致", "树", "炎", "德", "行", "时", "泰", "盛", "雄", "琛", "钧", "冠", "策", "腾", "楠",
  189. "榕", "风", "航", "弘", "秀", "娟", "英", "华", "慧", "巧", "美", "娜", "静", "淑", "惠", "珠", "翠", "雅", "芝", "玉", "萍",
  190. "红", "娥", "玲", "芬", "芳", "燕", "彩", "春", "菊", "兰", "凤", "洁", "梅", "琳", "素", "云", "莲", "真", "环", "雪", "荣",
  191. "爱", "妹", "霞", "香", "月", "莺", "媛", "艳", "瑞", "凡", "佳", "嘉", "琼", "勤", "珍", "贞", "莉", "桂", "娣", "叶", "璧",
  192. "璐", "娅", "琦", "晶", "妍", "茜", "秋", "珊", "莎", "锦", "黛", "青", "倩", "婷", "姣", "婉", "娴", "瑾", "颖", "露", "瑶",
  193. "怡", "婵", "雁", "蓓", "纨", "仪", "荷", "丹", "蓉", "眉", "君", "琴", "蕊", "薇", "菁", "梦", "岚", "苑", "婕", "馨", "瑗",
  194. "琰", "韵", "融", "园", "艺", "咏", "卿", "聪", "澜", "纯", "毓", "悦", "昭", "冰", "爽", "琬", "茗", "羽", "希", "欣", "飘",
  195. "育", "滢", "馥", "筠", "柔", "竹", "霭", "凝", "晓", "欢", "霄", "枫", "芸", "菲", "寒", "伊", "亚", "宜", "可", "姬", "舒",
  196. "影", "荔", "枝", "丽", "阳", "妮", "宝", "贝", "初", "程", "梵", "罡", "恒", "鸿", "桦", "骅", "剑", "娇", "纪", "宽", "苛",
  197. "灵", "玛", "媚", "琪", "晴", "容", "睿", "烁", "堂", "唯", "威", "韦", "雯", "苇", "萱", "阅", "彦", "宇", "雨", "洋", "忠",
  198. "宗", "曼", "紫", "逸", "贤", "蝶", "菡", "绿", "蓝", "儿", "翠", "烟", "小", "轩",
  199. }
  200. // SCn
  201. //
  202. // @Description: 生成随机中国名称
  203. func SCnName() string {
  204. var j_名 string
  205. j_名_len := Intn(2)
  206. for i := 0; i < j_名_len; i++ {
  207. j_名 = 名[Intn(len(名))]
  208. }
  209. return 百家姓[Intn(len(百家姓))] + j_名
  210. }