杰网资源 Design By www.escxy.com

年(2位)+一年中的第几天(3位)+指定位数随机数

//生成单号
//06123xxxxx
//sum 最少10位,sum 表示全部单号位数
func MakeYearDaysRand(sum int) string {
  //年
  strs := time.Now().Format("06")
  //一年中的第几天
  days := strconv.Itoa(GetDaysInYearByThisYear())
  count := len(days)
  if count < 3 {
    //重复字符0
    days = strings.Repeat("0", 3-count) + days
  }
  //组合
  strs += days
  //剩余随机数
  sum = sum - 5
  if sum < 1 {
    sum = 5
  }
  //0~9999999的随机数
  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 {
    //重复字符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;
}

补充:基于GO语言实现的支持高并发订单号生成函数

1.固定24位长度订单号,毫秒+进程id+序号。

2.同一毫秒内只要不超过一万次并发,则订单号不会重复。

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位代表进程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的数字前面补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
}
  

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。

标签:
golang,生成定单号

杰网资源 Design By www.escxy.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
杰网资源 Design By www.escxy.com

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?