礼包码/CDK 系统
概述
礼包码(CDK)是运营分发福利的轻量工具:主播发码、活动送码、渠道导流,玩家兑换即得奖励。CDK 系统的难点在码的安全(防批量生成、防猜测)、兑换幂等(一码多用、一人多兑的控制)、以及黑产防范(批量刷码、黄牛倒卖)。本文设计完整的 CDK 系统。
一、码生成算法
1.1 生成要求
码的要求:
唯一性(全库不重复)
不可猜测(不能顺序递增)
容量可控(批量生成指定数量)
可校验(快速判断码是否合法)
有信息熵(长度适中,如 12-16 位)1.2 生成方案
方案一:随机串
SecureRandom 生成随机字符集(去易混淆字符)
碰撞概率低(长度 12+ 足够)
需查重或撞库重试
方案二:编码式(推荐)
batchId + 随机校验位 编码
可识别批次/渠道,便于管理
方案三:自增 + 混淆
自增 ID → 加密/置换 → 校验位
可逆(兑换时可还原 ID),方便统计// 随机串生成示例
private static final char[] CHARS = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789".toCharArray();
public String genCode(int length) {
SecureRandom rnd = new SecureRandom();
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
sb.append(CHARS[rnd.nextInt(CHARS.length)]);
}
return sb.toString();
}编码式示例:
码 = BASE32(批次号 4bit + 序号 20bit) + 校验位 4bit
兑换时校验位不符 → 直接拒绝(非法码)
还原批次号 → 快速定位礼包二、兑换流程
2.1 兑换接口
兑换流程:
1. 校验码格式(长度/字符集/校验位)
2. 查码状态(未使用/存在)
3. 校验有效期(未过期)
4. 校验渠道/等级条件(如需)
5. 校验玩家未兑换过(限领)
6. 原子占用码(状态 → 已使用)
7. 发放奖励(邮件/道具)
8. 记录兑换流水// 码占用的原子性(防并发重复兑换)
int rows = cdkDao.occupy(code, playerId);
if (rows == 0) {
return fail(CODE_USED); // 已被占用
}
grantReward(playerId, batchId); // 占用成功才发奖2.2 兑换安全
防重复:
同一码只可兑换一次(状态原子占用)
同一玩家同批次限领一次(player + batch 唯一)
同一玩家限领总数(防批量小号)
防滥用:
兑换频率限制(Redis INCR)
同 IP/设备限次(黑产特征)三、有效期/限领/渠道管理
3.1 批量与批次
GiftCodeBatch:
batchId、名称、码数量、兑换上限
有效期(startTime/endTime)
渠道(全渠道/指定渠道)
奖励(道具/货币模板)
状态(草稿/已生成/已停用)码状态机:
UNUSED(未使用)→ USED(已使用)→ INVALID(已失效/回收)3.2 管理规则
有效期:
批次级有效期(整体过期)
过期码不可兑换
可提前停用(紧急回收)
限领:
每玩家每批次限 1 次(常见)
部分批次全服限量(先到先得)
渠道限定(仅对应渠道客户端可兑)
统计:
已生成/已使用/剩余量
兑换明细(谁/何时/何渠道)四、黑产防范
4.1 风险场景
黑产攻击面:
批量生成尝试(猜码)→ 校验位拦截
多账号批量兑换(小号)→ 设备/IP 限制
黄牛囤码 → 兑换流水分析
爬虫刷兑换接口 → 限流 + 风控4.2 防护手段
防护清单:
校验位(无效码快速拒绝,不查库)
兑换限频(每账号/每 IP/每设备)
设备指纹(同设备多账号标记)
风控规则(同 IP 兑换量异常告警)
兑换审计(全流水留痕)// 兑换前风控
if (!riskService.check(playerId, ip, deviceId)) {
return fail(RISK_BLOCKED);
}应急预案:
码泄露 → 立即停用批次 + 换码重发
兑换量突增 → 限流 + 告警
异常批次 → 审计回滚(已兑换的补偿处理)五、实现要点
核心接口:
generateBatch(batchConfig) // 生成批量码
redeem(playerId, code, channel) // 兑换
getBatchStat(batchId) // 批次统计
disableBatch(batchId) // 停用批次工程注意:
码存储(表 + 唯一索引 + 状态)
占用原子性(条件更新)
奖励发放幂等(兑换流水为凭)
过期码清理(定期归档)常见坑:
并发兑换同一码 → 条件更新占用
校验位缺失被穷举 → 必须带校验位
黑产批量刷 → 限频 + 风控
码泄露未回收 → 批量停用能力与其他系统衔接:
发奖 → 货币/道具/邮件系统
渠道判定 → 登录渠道信息
风控 → 行为检测/设备指纹
统计 → 运营后台报表