forked from free-lancers/electricity_bill_calc_service
		
	feat(utils):增加一个生成随机字符串的工具函数。
This commit is contained in:
		
							
								
								
									
										36
									
								
								utils/verify_code.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								utils/verify_code.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | |||||||
|  | package utils | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"math/rand" | ||||||
|  | 	"time" | ||||||
|  | 	"unsafe" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" | ||||||
|  |  | ||||||
|  | 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