钢铁直男兽
V1
2022/07/11阅读:21主题:极简黑
如何生成一个APP_ID
1. 什么是APP_ID
开放平台使用APP_ID, 来区分openapi的调用者, 相当于用户的一个身份证
用过开放平台的开发者 懂得都懂,不懂的说了也不懂,你也别问,利益牵扯太大,说了对你们没好处,我只能说水很深,网上的资料都删了,所以我只能说懂得都懂,不懂也没办法
2. 各家的APP_ID长什么样
● 微信的APP_ID
统一wx开头, "wx"+16位的 16进制数字

● 支付宝的APP_ID
16位的纯数字, 可以看出开头的4位是年份, 其他数字生成规则不明

● 融云的APP_ID
13位数字和字母组成的字符串, 生成规则不明

● 我设计的APP_ID
11位英文字母的组合

3. APP_ID需要满足什么需求
-
APP_ID会频繁在开放平台的接口调用中被使用, 所以不能太长, 浪费带宽 -
APP_ID可能被别人获取, 所以不能包含太多私有信息, 所以要有一定的随机性 -
APP_ID很多情况下要方便客户以及开放平台的人员进行调试, 所以可以包含一定公开的信息; 什么样的信息是允许公开的需要开放平台的设计者斟酌, 如将集群信息暴露在APP_ID上,方便快速缩小检查范围 -
APP_ID的长度要稳定, 不能一会儿长一会短显得不专业
4. 我的设计
下面介绍一下我是怎么设计APP_ID的
下面说一下我的app_id生成步骤
-
生成一个4位的十进制数字(1000~9999) -
获取当前时间的时间戳, 13位十进制数字 -
组合成为一个 17 (4+13) 位的十进制数字 -
将这个17位的十进制数字转化为 36 进制数字(0~9,a~z; 一共36位)
/**
* 先构造一个十进制的数字,
* 前四位: 为随机值(1000,9999),
* 后13位: 为时间戳 (类似于这种形式1631238326627)
* 然后将该数字转换为字符串
* 再用36进制重新解析([0-9]|[a-z]), 数字和小写字母
* 得到的字符串长度为11个字节
*
* @return 生成的字符串用作app_id, 是个11个字节的字符串
*/
public static String generateAppId() {
final String s = RandomUtil.randomInt(1000, 9999) + String.valueOf(System.currentTimeMillis());
BigInteger n = new BigInteger(s, 10);
return n.toString(36);//转换成36进制, 得到的字符串长度11个字节
//10000000000000000 转化之后是: 2qgpckvng1s ; 也是11个字节
//99999999999999999 转化之后是: rcn1hssighr ; 也是11个字节
}
根据这个算法得到的APP_ID
-
得到的字符串稳定11个字节 (utf8编码) -
生成的字符串有较强的随机性 -
不包含任何私有信息
作为一个小厂的开发, 没有那么多需求, 只要生成的APP_ID有随机性,长度稳定, 长度不太长 就够用了
希望这篇辣鸡文章对你有帮助
- END -作者介绍
钢铁直男兽
V1