私人论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 978|回复: 1

id长度与字符

[复制链接]

156

主题

303

帖子

1664

积分

新手上路

Rank: 1

积分
1664
发表于 2019-9-5 18:04:16 | 显示全部楼层 |阅读模式
OpenID共22位
[A-Z][0-9a-zA-Z_\-]{20}[0-9a-zA-Z]
就是 UUID 的 Base64 表记;不在末尾填充=号,并将标准Base64中的+和/分别改成了-和_

原始id
'aa_'.[0-9a-f]{12}
后面的随机数可用 md5(uniqid(null,TRUE)) 去掉前8位取12位

  1. include("./base62x.php");

  2. //原始id
  3. $oid = 'au_'. substr(md5(uniqid(null,TRUE)), 8, 16);

  4. //appid是oid的一种
  5. $appid = 'ap_963d3081bc38fb28';

  6. $openid = getOpenid($oid, $appid);
  7. $openid2 = Base62x::encode(md5($oid . '_' . $appid, TRUE));


  8. print 'oid = ' . $oid ."\n";
  9. print 'openid = ' . $openid ."\n";
  10. print 'openid2 = ' . $openid2 ."\n";


  11. function getOpenid($oid, $appid){
  12.         return strtr(base64_encode(md5($oid . '_' . $appid, TRUE)), array('='=>'','+'=>'-','/'=>'_'));
  13. }
复制代码
回复

使用道具 举报

156

主题

303

帖子

1664

积分

新手上路

Rank: 1

积分
1664
 楼主| 发表于 2019-9-11 16:56:55 | 显示全部楼层
随机数多少可能出现重复?

在 N 内取随机数,大约 (N^(1/2))/2 个数时会出现重复

80亿 可用14位36进制,12位62进制。
-----------------------------------------------

1千万倍即可
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|私人论坛

GMT+8, 2026-2-20 10:11 , Processed in 0.040784 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表