feat(verify):完成随机验证码的生成。
This commit is contained in:
		@@ -32,7 +32,7 @@ Golang 中可以使用的常用辅助功能工具箱。主要配备以下功能
 | 
				
			|||||||
  - [ ] UUID 生成器
 | 
					  - [ ] UUID 生成器
 | 
				
			||||||
  - [ ] short UUID 生成器
 | 
					  - [ ] short UUID 生成器
 | 
				
			||||||
- 验证码生成器
 | 
					- 验证码生成器
 | 
				
			||||||
  - [ ] 随机验证码生成算法
 | 
					  - [x] 随机验证码生成算法
 | 
				
			||||||
- 序列化算法
 | 
					- 序列化算法
 | 
				
			||||||
  - [ ] Base64 算法
 | 
					  - [ ] Base64 算法
 | 
				
			||||||
  - [ ] Base58 算法
 | 
					  - [ ] Base58 算法
 | 
				
			||||||
@@ -40,7 +40,7 @@ Golang 中可以使用的常用辅助功能工具箱。主要配备以下功能
 | 
				
			|||||||
- 常用工具函数
 | 
					- 常用工具函数
 | 
				
			||||||
  - [ ] 日期时间函数
 | 
					  - [ ] 日期时间函数
 | 
				
			||||||
- 常用工具类型
 | 
					- 常用工具类型
 | 
				
			||||||
  - [ ] 日期
 | 
					  - [x] 日期
 | 
				
			||||||
  - [ ] 时间
 | 
					  - [x] 时间
 | 
				
			||||||
 | 
					
 | 
				
			||||||
本工具箱仅可支持于 Golang 程序中使用。
 | 
					本工具箱仅可支持于 Golang 程序中使用。
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								random/random.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								random/random.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					// 提供用于生成伪随机数的工具函数。
 | 
				
			||||||
 | 
					package random
 | 
				
			||||||
							
								
								
									
										38
									
								
								random/verify_code/verify_code.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								random/verify_code/verify_code.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					// 提供一个快速生成指定长度的随机验证码的工具。
 | 
				
			||||||
 | 
					package verifyCode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"math/rand"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
						"unsafe"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var src = rand.NewSource(time.Now().UnixNano())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						// 6 bits to represent a letter index
 | 
				
			||||||
 | 
						letterIdBits = 6
 | 
				
			||||||
 | 
						// All 1-bits as many as letterIdBits
 | 
				
			||||||
 | 
						letterIdMask = 1<<letterIdBits - 1
 | 
				
			||||||
 | 
						letterIdMax  = 63 / letterIdBits
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 生成一个指定长度的随机验证码。
 | 
				
			||||||
 | 
					func RandStr(n int) string {
 | 
				
			||||||
 | 
						b := make([]byte, n)
 | 
				
			||||||
 | 
						// A rand.Int63() generates 63 random bits, enough for letterIdMax letters!
 | 
				
			||||||
 | 
						for i, cache, remain := n-1, src.Int63(), letterIdMax; i >= 0; {
 | 
				
			||||||
 | 
							if remain == 0 {
 | 
				
			||||||
 | 
								cache, remain = src.Int63(), letterIdMax
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if idx := int(cache & letterIdMask); idx < len(letters) {
 | 
				
			||||||
 | 
								b[i] = letters[idx]
 | 
				
			||||||
 | 
								i--
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							cache >>= letterIdBits
 | 
				
			||||||
 | 
							remain--
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return *(*string)(unsafe.Pointer(&b))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user