基于Hashids的高效游戏礼包兑换码系统完整设计

所用生成器:Hashids - generate short unique ids from integers

系统优势:

  • 生成的兑换码不实际入库,只在数据库中记录有效个数,数据库友好
  • 兑换码使用时,无须查库校验有效性和加锁,在内存中确认有效后直接落库,由唯一索引进行数据库重复兑换校验,高效
  • 兑换码仅绑定礼包id,可随时修改礼包内容,运营掌控力度大
  • 兑换码长度和内容可随意设定(将影响可用数量),生成灵活
  • 兑换码有加密,不能被轻易破解,安全保障

运营需求

  • 运营配置游戏礼包,并为该礼包生成或指定礼包兑换码,玩家可使用兑换码兑换指定礼包
  • 每个礼包玩家仅可兑换一次
  • 礼包可设定以下属性并支持随时修改
    • 生效时段
    • 奖励内容
    • 上下架状态
    • 增加可兑换数量
    • 礼包邮件内容
    • 可兑换玩家限制(自行实现)
  • 支持通用型礼包码,即单个礼包码可由大量玩家兑换,并可设定兑换数量
  • 支持生成唯一兑换码,即单个礼包码仅可由单个玩家兑换,兑换后立刻失效
  • 随时查询某兑换码是否处于生效状态,如已被兑换需查询何人何时兑换
  • 随时查询某玩家已经兑换过的礼包

HashIds原理和使用

hashids的原理是将一个int数组转换为使用指定字符的字符串,并可混淆密码。如图所示:

 由此,我们可以将礼包码和计数值放入数组,由Hashids生成兑换码,并在兑换时解析出礼包码和计数值,用于兑换。

具体步骤如下:

  1. 新建礼包,填好礼包的各项属性,入库,得到礼包的数据库id:1
  2. for循环遍历指定次数,将礼包id和遍历的计数值放入数组,并以此通过Hashids生成兑换码
  3. 更新礼包中的可兑换数量generatedCount,表示已经为这个礼包生成了generatedCount个兑换码
  4. 将生成的兑换码返回至运营后台
  5. 运营后台可随时继续生成兑换码,实际只是将遍历的初始计数值调整为generatedCount即可。
  6. 运营后台可随时查看已生成的兑换码,实际只需重新调用一次生成逻辑但不更新可兑换数量即可。

在玩家使用某个兑换码进行兑换时:

  1. 将该礼包码进行解码,如果无法解码出含有2个元素的int数组,该兑换码即为无效兑换码
  2. 查询解码出的礼包id,查库(建议缓存在内存中)得到该礼包信息,校验上下架/可兑换时间/自定义限制等。
  3. 使用解码出的计数值,对比礼包的可兑换数量,如已超过也无效
  4. 直接使用用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值