美文网首页
golang生成8位邀请码

golang生成8位邀请码

作者: 我爱张智容 | 来源:发表于2021-03-11 16:52 被阅读0次
  1. 选取数字加英文字母组成32个字符的字符串,用于表示32进制数。

  2. 用一个特定的字符比如A作为分隔符,解析的时候字符A后面的字符不参与运算。

  3. LEN表示邀请码长度,默认为8。

具体代码如下:

package invitecode
 
import (
    "strings"
)
 
const (
    BASE    = "E8S2DZX9WYLTN6BQF7CP5IK3MJUAR4HV"
    DECIMAL = 32
    PAD     = "A"
    LEN     = 8
)
 
// id转code
 
func Encode(uid uint64) string {
    id := uid
    mod := uint64(0)
    res := ""
    for id != 0 {
        mod = id % DECIMAL
        id = id / DECIMAL
        res += string(BASE[mod])
    }
    resLen := len(res)
    if resLen < LEN {
        res += PAD
        for i := 0; i < LEN-resLen-1; i++ {
            res += string(BASE[(int(uid)+i)%DECIMAL])
        }
    }
    return res
}
 
func Decode(code string) uint64 {
    res := uint64(0)
    lenCode := len(code)
    baseArr := []byte(BASE)       // 字符串进制转换为byte数组
    baseRev := make(map[byte]int) // 进制数据键值转换为map
    for k, v := range baseArr {
        baseRev[v] = k
    }
    // 查找补位字符的位置
    isPad := strings.Index(code, PAD)
    if isPad != -1 {
        lenCode = isPad
    }
    r := 0
    for i := 0; i < lenCode; i++ {
        // 补充字符直接跳过
        if string(code[i]) == PAD {
            continue
        }
        index, ok := baseRev[code[i]]
        if !ok {
            return 0
        }
        b := uint64(1)
        for j := 0; j < r; j++ {
            b *= DECIMAL
        }
        res += uint64(index) * b
        r++
    }
    return res
}

相关文章

  • golang生成8位邀请码

    选取数字加英文字母组成32个字符的字符串,用于表示32进制数。 用一个特定的字符比如A作为分隔符,解析的时候字符A...

  • 邀请码生成

    游戏社交部分往往需要邀请码。以下是我的实现。供参考。其中有一些依赖的框架的特定代码,但不影响理解逻辑。值得强调的点...

  • golang如何生成与读取二维码

    golang如何生成与读取二维码 生成二维码 skip2/go-qrcode生成二维码 获取: 生成二维码图片: ...

  • 用户邀请码生成

    业务场景:一般为已有用户生成邀请码给新用户使用,之后两者都会得到相应奖励。要求必须唯一,并且尽可能短,一般为5-9...

  • java生成邀请码

    喜欢的小伙伴们可以点点关注,文章结尾有惊喜礼包等着您喔!!! package com.gzjf.twsapi.ut...

  • 2019-06-17 邀请码的生成(基于自增id与多进制方案)

    项目开发过程中,偶尔会有邀请码需求。1.生成唯一邀请码2.得到邀请码的用户可以体验某项业务 这里分享一下邀请码的生...

  • [code snippet]生成邀请码

    参考用 Python 生成随机的邀请码 正如参考中所述,邀请码不仅要能够防止客户端伪造,还要方便服务端验证。 我大...

  • javascript随机邀请码生成

  • 6位邀请码生成

    背景:邀请是一种常见的裂变方式,这里生成全局唯一的6位邀请码。思路:由 0-9 加上24个大写字母(去掉容易混淆的...

  • Golang"Connection reset"&"EOF"问题

    【场景】 在调用微信生成小程序二维码生成接口的时候,使用golang默认的http client发送请求。 代码如...

网友评论

      本文标题:golang生成8位邀请码

      本文链接:https://www.haomeiwen.com/subject/irkoqltx.html