ITPub博客

首页 > 应用开发 > IT综合 > 实现一个直播视频app源码的邀请码功能

实现一个直播视频app源码的邀请码功能

IT综合 作者:云豹科技晓彤 时间:2021-08-25 16:58:29 0 删除 编辑

最近做一个直播视频app源码的邀请码功能,一直没找到感觉很完美的方法,然后自己造了一个轮子,当然效果还不是很完善。

首先我认为直播视频app源码的邀请码需要有以下特性:

1、唯一性,不能出现两个场景下生成一样的邀请码。

2、不规律性,至少在字面上不能猜出规律来。

3、高效性,生成邀请码的算法不能太过复杂,或者太消耗性能。

思路:

理论上用时间戳生成的数字串基本上是唯一的,如果经过一定规则的打乱顺序,然后进行字母映射的话,字面上的规律还是不怎么可能直接看出来的。但是时间戳有一个不好的地方,就是长度太长了,当前我想要使用的场景下,邀请码推荐是生成6位的,6位用完了才会去使用更长的。此外,对于长度短的随机算法,出现冲突,去重的过程不管从空间上还是时间上去解决都一定程度上消耗性能。

所以,我希望找到一个算法,能每次都直接生成长度优先在6位,而且唯一的邀请码。

当然,凭空直接生成邀请码肯定会冲突,生成邀请码这里可以输入一个唯一的依据。比如说,我使用了当前是第几个邀请码。

这样就类似于,y=f(x),输入的x是整数序列1、2、3、4......,输出的y是一段优先为6位的邀请码。但是f函数的映射不是事先生成好的,这样的话会占空间,这里希望是在线生成。

步骤:

网上找了一些很好的混淆规律的点,比如:数字转36进制包含字母的串(然后把36进制中映射的字母和数字顺序打乱)、数字顺序按照一定规则打乱等。于是我按照了以下步骤生成邀请码。

步骤一(打乱数字顺序):首先输入的序列x是唯一的,假设我的邀请码最短长度MIN_LENGTH是6,那么我先把x转成长度至少为6的数字串,不足6位的高位补0。然后,对低6位按照一定规则进行打乱,比如固定的交换第4位和第5位,然后交换第1位和第3位等。让再次生成的数字串不是连续的。(当然此处的打乱长度可以不一定是6位,但是邀请码是6位的话,数字串6位长度不会超过邀请码的长度)

步骤二(32进制乱序编码):由步骤一生成的乱序数字串进行32进制乱序编码,为什么选取32进制?因为保留了a、b、c、d四个字母在后续步骤中做随机补全。乱序编码表比如:

code_map = [
        'e', '0',
        'f', 'g', '6',
        'h', 'i', 'j', 'k', '9',
        'l', '3',
        'm', 'n', 'o', 'p', 'q', 'r', '1',
        's', 't', '7',
        'u', 'v', 'w', '8',
        'x', '2',
        'y', '4',
        'z', '5'
    ]

在十进制中数字p,会映射成字符code_map[p],这样进行乱序编码后,生成了字符串s。

步骤三(随机补全):因为步骤二保留了a、b、c、d四个关键字母,而且生成的字符串s不一定达到了MIN_LENGTH长度6。那么就用关键字母补全剩余的位数,而且是随机选取补全到字符串中的随机位置。最终生成长度优先为6位的邀请码。(后续x越大的时候,邀请码会超过6位,但是基本上高位可能会基本上某段区间是一样的,不过规律还是比较不明显的)

实践:

比如我某次生成的直播视频app源码邀请码:

daa6gb
kabaci
ddmc9c
qccmbc
atpaca
caw1ba
byccb7
dedaa8
6ydbdc

这样,我们就可以简单的实现一个,直播视频app源码邀请码的功能了。

声明:本文由云豹科技转发自AndyQsmart博客,如有侵权请联系作者删除


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70002045/viewspace-2788782/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
音视频软件开发相关知识科普账号

注册时间:2021-06-11

  • 博文量
    163
  • 访问量
    60338