69 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			69 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package seqs
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									cr "crypto/rand"
							 | 
						||
| 
								 | 
							
									"math/big"
							 | 
						||
| 
								 | 
							
									mr "math/rand"
							 | 
						||
| 
								 | 
							
									"time"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 随机生成器;
							 | 
						||
| 
								 | 
							
								type rand struct {
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 全局随机数;
							 | 
						||
| 
								 | 
							
								var rnd *mr.Rand
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func init() {
							 | 
						||
| 
								 | 
							
									rnd = mr.New(mr.NewSource(time.Now().UnixNano()))
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 构建;
							 | 
						||
| 
								 | 
							
								func Rand() *rand {
							 | 
						||
| 
								 | 
							
									return &rand{}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 随机数字;
							 | 
						||
| 
								 | 
							
								func (rd *rand) DigitId(_len int) string {
							 | 
						||
| 
								 | 
							
									return rd.newId([]byte("0123456789"), _len)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 随机字母;
							 | 
						||
| 
								 | 
							
								func (rd *rand) ChrtId(_len int) string {
							 | 
						||
| 
								 | 
							
									return rd.newId([]byte("abcdefghijklmnopqrstuvwxyz"), _len)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 随机混合(数字+字母);
							 | 
						||
| 
								 | 
							
								func (rd *rand) BothId(_len int) string {
							 | 
						||
| 
								 | 
							
									return rd.newId([]byte("0123456789abcdefghijklmnopqrstuvwxyz"), _len)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 随机范围(长整型);
							 | 
						||
| 
								 | 
							
								func (rd *rand) RandI64(min, max int64) int64 {
							 | 
						||
| 
								 | 
							
									bi, _ := cr.Int(cr.Reader, big.NewInt(max-min))
							 | 
						||
| 
								 | 
							
									return min + bi.Int64()
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 随机范围(0 ~ max);
							 | 
						||
| 
								 | 
							
								func (rd *rand) RandInt(max int) int {
							 | 
						||
| 
								 | 
							
									return rnd.Intn(max)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 随机中文;
							 | 
						||
| 
								 | 
							
								func (rd *rand) ChrtCn(_len int) string {
							 | 
						||
| 
								 | 
							
									a := make([]rune, _len)
							 | 
						||
| 
								 | 
							
									for i := range a {
							 | 
						||
| 
								 | 
							
										a[i] = rune(rd.RandI64(19968, 40869))
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return string(a)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// newId;
							 | 
						||
| 
								 | 
							
								func (rd *rand) newId(tmpl []byte, _len int) string {
							 | 
						||
| 
								 | 
							
									var r []byte
							 | 
						||
| 
								 | 
							
									for i := 0; i < _len; i++ {
							 | 
						||
| 
								 | 
							
										r = append(r, tmpl[rnd.Intn(len(tmpl))])
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return string(r)
							 | 
						||
| 
								 | 
							
								}
							 |