实现一个直播视频app源码的邀请码功能
最近做一个直播视频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博客,如有侵权请联系作者删除
实现一个直播视频app源码的邀请码功能相关推荐
- 实现直播视频app源码的底部导航栏
底部导航栏的应用非常的广泛.今天就介绍直播视频app源码的其中一种实现方式. 一.Fragment + TextView 实现 前面一篇博客在介绍Fragment 的时候就使用了Fragment + ...
- 教你实现,搭建直播视频app源码的账号体系
账号体系价值 我们先来说一下直播视频app源码账号体系的价值,账号基础价值是用户识别,并将用户权益关联在账号下.账号在一定程度上就等同于会员,通过服务与用户建立深度链接.在这个得用户者得天下的时代,各 ...
- 直播视频app源码的靓号可以怎样实现?
一般开发直播视频app源码时,会预留一些号码给以后升级的会员使用,比如靓号,直播视频app源码采用正则表达式实现较好,通过规则引擎的后台页面做成实时可配置的也是不错的选择. 一. 一般会有如下的正则需 ...
- java修改动态视频,直播视频app源码,动态修改cron
直播视频app源码,动态修改cron相关的代码 package com.chashiyu.task.dynamic; import org.springframework.beans.factory. ...
- 直播视频app源码,Android 点击生成二维码
直播视频app源码,Android 点击生成二维码实现的相关代码 activity.xml代码如下: <?xml version="1.0" encoding="u ...
- 直播视频app源码,自定义可点击可滑动的通用RatingBar
直播视频app源码,自定义可点击可滑动的通用RatingBar实现的相关代码 绘制ratingbar 绘制未选中的背景 /*** 未选中Bitmap*/ private val starBgBitma ...
- 直播视频app源码,保存图片到系统相册
直播视频app源码,保存图片到系统相册相关的代码 public static void saveImageToGallery(Context context, Bitmap bmp) {// 首先保存 ...
- 直播视频app源码,高度不能充满全屏
直播视频app源码,修改高度不能充满全屏相关的代码 <ScrollViewandroid:layout_width="match_parent"android:layout_ ...
- 直播视频app源码的分享功能,是这样实现的
直播视频app源码拥有大量的用户和直播内容,为了方便用户分享平台内容,直播视频app源码实现了分享到第三方的功能,下面就是直播视频app源码实现分享功能的代码. <!doctype html&g ...
最新文章
- Linux 之Cut命令详解
- BAT可真拿抖音一点儿办法也没有
- 容器技术之二.Docker的安装和常见问题
- 带旋treap概念及模板,带例题:普通平衡树
- 数据结构php语言,PHP语言做网页开发,会用到什么数据结构,算法?
- autojs命令代码大全_各个主流品牌手机的命令代码大全,安卓工程模式的指令大全!...
- oracle去除检查非空,oracle 主键,非空,检查,唯一,默认,外键约束
- [导入]C#做的一个加密/解密的类
- 2021-08-22监听器实现在线客户端统计
- android actionbar setCustomView时布局整体右移解决方案
- ESP32的SDK开发之获取SNTP网络时间
- 2019年南京大学计算机研究生复试分数线,南京大学2019年硕士研究生复试基本分数线...
- Jetson Nano系列教程4-生死看淡,不服就干之I2C
- GraphicsLab Project之简易贴画系统(Decal System)
- 秒针计时器 html,JS实现一个秒表计时器
- 微信小程序获取当前系统时间以及判断周几
- 用PGP实现加密和解密全过程
- 【思维题】CodeForce 817A Treasure Hunt
- smi时序_详解芯片组上电时序.ppt
- 光纤仿真相关参数——光纤损耗、数值孔径、归一化参数
热门文章
- vim 配置及插件安装管理(超级详细)
- PS(简单操作) 单张图片制作九宫格/证件照排版
- HTTP接口测试代码,HTTP GET/POST模拟请求测试工具
- 2023年全国最新二级建造师精选真题及答案62
- RAC的并发操作与分布式锁DLM
- Android实战技巧之三十九:短信收发
- linux服务器在没有网的条件下,怎么安装使用numpy呢
- AI生命科学绘图(2):基因结构可变剪切的绘制
- SSL_read: Failure in SSL library (protocol error?)
- 化工集团公司安全风险智能化管控平台