- update
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details

master v1.0.6
李光春 2 years ago
parent 5023137ef6
commit eca91adfa6

3
.gitignore vendored

@ -4,4 +4,5 @@
.idea
.vscode
*.log
gomod.sh
gomod.sh
/vendor/

@ -2,7 +2,7 @@
<a href="https://www.dtapp.net/">Golang String</a>
</h1>
📦 Golang 字符串处理
📦 Golang String
[comment]: <> (go)
[![godoc](https://pkg.go.dev/badge/go.dtapp.net/gostring?status.svg)](https://pkg.go.dev/go.dtapp.net/gostring)

@ -0,0 +1,203 @@
package gostring
import (
"errors"
"fmt"
"go.dtapp.net/gorandom"
"go.dtapp.net/gotime"
)
// GenerateId 生成18一编号
func GenerateId(customId string) string {
currentTime := gotime.Current().Format()
one, err := generateIdOne(customId, currentTime)
if err == nil {
return one
}
two, err := generateIdTwo(customId, currentTime)
if err == nil {
return two
}
three, err := generateIdThree(customId, currentTime)
if err == nil {
return three
}
four, err := generateIdFour(customId, currentTime)
if err == nil {
return four
}
five, err := generateIdFive(customId, currentTime)
if err == nil {
return five
}
six, err := generateIdSix(customId)
return six
}
// GenerateIdAndTime 生成18一编号
func GenerateIdAndTime(customId, customTime string) string {
one, err := generateIdOne(customId, customTime)
if err == nil {
return one
}
two, err := generateIdTwo(customId, customTime)
if err == nil {
return two
}
three, err := generateIdThree(customId, customTime)
if err == nil {
return three
}
four, err := generateIdFour(customId, customTime)
if err == nil {
return four
}
five, err := generateIdFive(customId, customTime)
if err == nil {
return five
}
six, err := generateIdSix(customId)
return six
}
// 生成18位时间[年月日时分]唯一编号
func generateIdOne(customId, setTime string) (string, error) {
var (
newRandomLength = 0 // 随机数据长度
customIdLength = len(customId) // 自定义长度
)
const (
randomLength = 5 // 随机数据长度
dataLength = 18 // 默认数据长度
dateFormat = "200601021504" // 时间格式
dateFormatLength = len(dateFormat) // 时间格式长度
)
// 重新计算随机数据长度
newRandomLength = dataLength - (dateFormatLength + customIdLength)
if (dateFormatLength+customIdLength > dataLength) || (dateFormatLength+customIdLength == dataLength) || (newRandomLength < randomLength) {
return "", errors.New("没有满足条件")
}
return fmt.Sprintf("%v%s%s", customId, gotime.SetCurrentParse(setTime).SetFormat(dateFormat), gorandom.Numeric(newRandomLength)), nil
}
// 生成18位时间[年月日时]唯一编号
func generateIdTwo(customId, setTime string) (string, error) {
var (
newRandomLength = 0 // 随机数据长度
customIdLength = len(customId) // 自定义长度
)
const (
randomLength = 5 // 随机数据长度
dataLength = 18 // 默认数据长度
dateFormat = "2006010215" // 时间格式
dateFormatLength = len(dateFormat) // 时间格式长度
)
// 重新计算随机数据长度
newRandomLength = dataLength - (dateFormatLength + customIdLength)
if (dateFormatLength+customIdLength > dataLength) || (dateFormatLength+customIdLength == dataLength) || (newRandomLength < randomLength) {
return "", errors.New("没有满足条件")
}
return fmt.Sprintf("%v%s%s", customId, gotime.SetCurrentParse(setTime).SetFormat(dateFormat), gorandom.Numeric(newRandomLength)), nil
}
// 生成18位时间[年月日]唯一编号
func generateIdThree(customId, setTime string) (string, error) {
var (
newRandomLength = 0 // 随机数据长度
customIdLength = len(customId) // 自定义长度
)
const (
randomLength = 5 // 随机数据长度
dataLength = 18 // 默认数据长度
dateFormat = "20060102" // 时间格式
dateFormatLength = len(dateFormat) // 时间格式长度
)
// 重新计算随机数据长度
newRandomLength = dataLength - (dateFormatLength + customIdLength)
if (dateFormatLength+customIdLength > dataLength) || (dateFormatLength+customIdLength == dataLength) || (newRandomLength < randomLength) {
return "", errors.New("没有满足条件")
}
return fmt.Sprintf("%v%s%s", customId, gotime.SetCurrentParse(setTime).SetFormat(dateFormat), gorandom.Numeric(newRandomLength)), nil
}
// 生成18位时间[年月]唯一编号
func generateIdFour(customId, setTime string) (string, error) {
var (
newRandomLength = 0 // 随机数据长度
customIdLength = len(customId) // 自定义长度
)
const (
randomLength = 5 // 随机数据长度
dataLength = 18 // 默认数据长度
dateFormat = "200601" // 时间格式
dateFormatLength = len(dateFormat) // 时间格式长度
)
// 重新计算随机数据长度
newRandomLength = dataLength - (dateFormatLength + customIdLength)
if (dateFormatLength+customIdLength > dataLength) || (dateFormatLength+customIdLength == dataLength) || (newRandomLength < randomLength) {
return "", errors.New("没有满足条件")
}
return fmt.Sprintf("%v%s%s", customId, gotime.SetCurrentParse(setTime).SetFormat(dateFormat), gorandom.Numeric(newRandomLength)), nil
}
// 生成18位时间[年]唯一编号
func generateIdFive(customId, setTime string) (string, error) {
var (
newRandomLength = 0 // 随机数据长度
customIdLength = len(customId) // 自定义长度
)
const (
randomLength = 5 // 随机数据长度`
dataLength = 18 // 默认数据长度
dateFormat = "2006" // 时间格式
dateFormatLength = len(dateFormat) // 时间格式长度
)
// 重新计算随机数据长度
newRandomLength = dataLength - (dateFormatLength + customIdLength)
if (dateFormatLength+customIdLength > dataLength) || (dateFormatLength+customIdLength == dataLength) || (newRandomLength < randomLength) {
return "", errors.New("没有满足条件")
}
return fmt.Sprintf("%v%s%s", customId, gotime.SetCurrentParse(setTime).SetFormat(dateFormat), gorandom.Numeric(newRandomLength)), nil
}
// 生成18位随机唯一编号
func generateIdSix(customId string) (string, error) {
var (
newRandomLength = 0 // 随机数据长度
customIdLength = len(customId) // 自定义长度
)
const (
randomLength = 5 // 随机数据长度
dataLength = 18 // 默认数据长度
)
// 重新计算随机数据长度
newRandomLength = dataLength - customIdLength
if (customIdLength > dataLength) || (customIdLength == dataLength) || (newRandomLength < randomLength) {
return "", errors.New("没有满足条件")
}
return fmt.Sprintf("%v%s", customId, gorandom.Numeric(newRandomLength)), nil
}

@ -0,0 +1,57 @@
package gostring
import (
"strconv"
"testing"
)
func TestGenerateId(t *testing.T) {
t.Log(GenerateId(""))
}
func TestGenerateIdAndTime(t *testing.T) {
var data = []string{
"2022-04-26 15:15:15.244",
"2022-04-26 15:21:39.852",
"2022-04-26 16:45:12.915",
"2022-04-26 16:45:51.664",
"2022-04-26 16:46:10.647",
"2022-04-26 16:46:35.952",
"2022-04-26 16:47:02.211",
"2022-04-26 16:48:46.841",
"2022-04-26 16:49:05.583",
"2022-04-26 16:49:38.909",
"2022-04-26 16:50:37.448",
"2022-04-26 16:50:58.763",
"2022-04-26 16:51:14.672",
"2022-04-26 16:52:06.194",
"2022-04-26 16:52:33.746",
"2022-04-26 16:52:56.281",
"2022-04-26 16:53:21.239",
"2022-04-26 16:53:50.016",
"2022-04-26 16:54:17.313",
"2022-04-26 16:54:47.056",
"2022-04-26 16:55:12.822",
"2022-04-26 16:55:45.031",
"2022-04-26 16:56:38.678",
"2022-04-26 16:57:00.522",
"2022-04-26 16:57:33.240",
"2022-04-26 17:28:37.719",
}
for _, v := range data {
t.Log(GenerateIdAndTime("P0", v))
}
}
func BenchmarkGenerateId(b *testing.B) {
for i := 0; i < b.N; i++ {
b.Logf("---------%v---------", i)
b.Log(GenerateId(""))
b.Log(GenerateId("Q"))
b.Log(GenerateId("Q1"))
b.Log(GenerateId("Q10000"))
b.Log(GenerateId("Q172676"))
b.Log(GenerateId("Q17267650"))
b.Log(GenerateId(strconv.Itoa(i)))
}
}

@ -1,3 +1,8 @@
module go.dtapp.net/gostring
go 1.18
require (
go.dtapp.net/gorandom v1.0.1
go.dtapp.net/gotime v1.0.4
)

@ -0,0 +1,4 @@
go.dtapp.net/gorandom v1.0.1 h1:IWfMClh1ECPvyUjlqD7MwLq4mZdUusD1qAwAdsvEJBs=
go.dtapp.net/gorandom v1.0.1/go.mod h1:ZPdgalKpvFV/ATQqR0k4ns/F/IpITAZpx6WkWirr5Y8=
go.dtapp.net/gotime v1.0.4 h1:gOOkGKfhJwX+dsGHvnF2est09Oqvk7cihJkePddJ5a8=
go.dtapp.net/gotime v1.0.4/go.mod h1:Gq7eNLr2iMLP18UNWONRq4V3Uhf/ADp4bIrS+Tc6ktY=

@ -0,0 +1,8 @@
package gostring
type Only struct {
}
func NewOnly() *Only {
return &Only{}
}

@ -0,0 +1,18 @@
package gostring
import (
"crypto/rand"
"fmt"
"time"
)
// GetUuId 由 32 个十六进制数字组成,以 6 个组显示,由连字符 - 分隔
func GetUuId() string {
unix32bits := uint32(time.Now().UTC().Unix())
buff := make([]byte, 12)
numRead, err := rand.Read(buff)
if numRead != len(buff) || err != nil {
return ""
}
return fmt.Sprintf("%x-%x-%x-%x-%x-%x", unix32bits, buff[0:2], buff[2:4], buff[4:6], buff[6:8], buff[8:])
}

@ -0,0 +1,15 @@
package gostring
import (
"testing"
)
func TestGetUuId(t *testing.T) {
t.Log(GetUuId())
}
func BenchmarkGetUuId(b *testing.B) {
for i := 0; i < b.N; i++ {
b.Log(GetUuId())
}
}

@ -1,3 +1,3 @@
package gostring
const Version = "1.0.5"
const Version = "1.0.6"

@ -0,0 +1,13 @@
package gostring
import "testing"
func TestVersion(t *testing.T) {
t.Log(Version)
}
func BenchmarkVersion(b *testing.B) {
for i := 0; i < b.N; i++ {
b.Log(Version)
}
}
Loading…
Cancel
Save