package strutil
import (
"crypto/rand"
"fmt"
"math/big"
"strings"
"github.com/gookit/goutil/byteutil"
)
func Md5 (src any ) string { return string (Md5Bytes (src )) }
func MD5 (src any ) string { return Md5 (src ) }
func GenMd5 (src any ) string { return Md5 (src ) }
func Md5Simple (src any ) string {
md5Bytes := byteutil .Md5Sum (src )
b62str := new (strings .Builder )
b62str .Grow (16 )
for _ , b := range md5Bytes {
b62str .WriteByte (Base62Chars [b %0x3E ])
}
return b62str .String ()
}
func Md5Base62 (src any ) string {
md5Bytes := byteutil .Md5Sum (src )
number := new (big .Int )
number .SetBytes (md5Bytes )
base62 := new (strings .Builder )
for number .Sign () > 0 {
remainder := new (big .Int )
number .DivMod (number , big .NewInt (62 ), remainder )
base62 .WriteByte (Base62Chars [remainder .Int64 ()])
}
runes := []rune (base62 .String ())
for i , j := 0 , len (runes )-1 ; i < j ; i , j = i +1 , j -1 {
runes [i ], runes [j ] = runes [j ], runes [i ]
}
return string (runes )
}
func Md5Bytes (src any ) []byte { return byteutil .Md5 (src ) }
func ShortMd5 (src any ) string { return string (byteutil .ShortMd5 (src )) }
func UUIDv4 () (string , error ) {
b := make ([]byte , 16 )
if _ , err := rand .Read (b ); err != nil {
return "" , fmt .Errorf ("generate UUID fail: %w" , err )
}
b [6 ] = (b [6 ] & 0x0f ) | 0x40
b [8 ] = (b [8 ] & 0x3f ) | 0x80
return fmt .Sprintf ("%x-%x-%x-%x-%x" , b [0 :4 ], b [4 :6 ], b [6 :8 ], b [8 :10 ], b [10 :16 ]), nil
}
func ShortUUID () string {
b := make ([]byte , 4 )
if _ , err := rand .Read (b ); err != nil {
return fmt .Sprintf ("%04x" , b )
}
return fmt .Sprintf ("%08x" , b )
}
The pages are generated with Golds v0.8.4 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .