主頁 > 知識庫 > golang 生成定單號的操作

golang 生成定單號的操作

熱門標(biāo)簽:宿遷便宜外呼系統(tǒng)代理商 重慶慶云企業(yè)400電話到哪申請 湛江crm外呼系統(tǒng)排名 寧波語音外呼系統(tǒng)公司 上海極信防封電銷卡價格 鄭州智能語音電銷機(jī)器人價格 仙桃400電話辦理 不封卡外呼系統(tǒng) 地圖標(biāo)注免費(fèi)定制店

年(2位)+一年中的第幾天(3位)+指定位數(shù)隨機(jī)數(shù)

//生成單號
//06123xxxxx
//sum 最少10位,sum 表示全部單號位數(shù)
func MakeYearDaysRand(sum int) string {
  //年
  strs := time.Now().Format("06")
  //一年中的第幾天
  days := strconv.Itoa(GetDaysInYearByThisYear())
  count := len(days)
  if count  3 {
    //重復(fù)字符0
    days = strings.Repeat("0", 3-count) + days
  }
  //組合
  strs += days
  //剩余隨機(jī)數(shù)
  sum = sum - 5
  if sum  1 {
    sum = 5
  }
  //0~9999999的隨機(jī)數(shù)
  ran := GetRand()
  pow := math.Pow(10, float64(sum)) - 1
  //fmt.Println("sum=>", sum)
  //fmt.Println("pow=>", pow)
  result := strconv.Itoa(ran.Intn(int(pow)))
  count = len(result)
  //fmt.Println("result=>", result)
  if count  sum {
    //重復(fù)字符0
    result = strings.Repeat("0", sum-count) + result
  }
  //組合
  strs += result
  return strs
}
//年中的第幾天
func GetDaysInYearByThisYear() int {
  now := time.Now()
  total := 0
  arr := []int{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
  y, month, d := now.Date()
  m := int(month)
  for i := 0; i  m-1; i++ {
    total = total + arr[i]
  }
  if (y%400 == 0 || (y%4 == 0  y%100 != 0))  m > 2 {
    total = total + d + 1
  } else {
    total = total + d
  }
  return total;
}

補(bǔ)充:基于GO語言實(shí)現(xiàn)的支持高并發(fā)訂單號生成函數(shù)

1.固定24位長度訂單號,毫秒+進(jìn)程id+序號。

2.同一毫秒內(nèi)只要不超過一萬次并發(fā),則訂單號不會重復(fù)。

github地址:https://github.com/w3liu/go-common/blob/master/number/ordernum/ordernum.go

package ordernum 
import (
  "fmt"
  "github.com/w3liu/go-common/constant/timeformat"
  "os"
  "sync/atomic"
  "time"
)
 
var num int64 
//生成24位訂單號
//前面17位代表時間精確到毫秒,中間3位代表進(jìn)程id,最后4位代表序號
func Generate(t time.Time) string {
  s := t.Format(timeformat.Continuity)
  m := t.UnixNano()/1e6 - t.UnixNano()/1e9*1e3
  ms := sup(m, 3)
  p := os.Getpid() % 1000
  ps := sup(int64(p), 3)
  i := atomic.AddInt64(num, 1)
  r := i % 10000
  rs := sup(r, 4)
  n := fmt.Sprintf("%s%s%s%s", s, ms, ps, rs)
  return n
}
 
//對長度不足n的數(shù)字前面補(bǔ)0
func sup(i int64, n int) string {
  m := fmt.Sprintf("%d", i)
  for len(m)  n {
   m = fmt.Sprintf("0%s", m)
  }
  return m
}
  

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Golang 實(shí)現(xiàn)Thrift客戶端連接池方式
  • golang 通過ssh代理連接mysql的操作
  • 淺談golang結(jié)構(gòu)體偷懶初始化
  • golang連接kafka消費(fèi)進(jìn)ES操作
  • golang實(shí)現(xiàn)各種情況的get請求操作
  • Golang 實(shí)現(xiàn)分片讀取http超大文件流和并發(fā)控制
  • 在Golang中使用http.FileServer返回靜態(tài)文件的操作

標(biāo)簽:海南 物業(yè)服務(wù) 青海 安康 儋州 電子產(chǎn)品 遼寧 西雙版納

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang 生成定單號的操作》,本文關(guān)鍵詞  golang,生成,定單,號的,操作,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang 生成定單號的操作》相關(guān)的同類信息!
  • 本頁收集關(guān)于golang 生成定單號的操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章