<meta name="keywords" content="华夏棋牌,PHP ,C扩年夜随机数" />
华夏棋牌 > php教程 > php教程 > 注释

PHP 随机数 C扩年夜随机数

原创 2016-05-07 14:34:45 0 2610
第六期线上培训班
PHP 随机数 C扩年夜随机数

华夏棋牌 由于要用到结实长度的随机字符串。

首先是一段PHP代码

$str_md5=md5(uniqid());
$rand= mt_rand(1, 28);
$str1=substr($str_md5,$rand,6);
$rand= mt_rand(1, 28);
$str2=substr($str_md5,$randa,6);
$rand= mt_rand(1, 28);
$str3=substr($str_md5,$rand,6);
$code=substr($str1.$str2.$str3,0,8);


天生180000个随机字符串,图中是凭证反双数目倒序排列,可以看到基本都有重复的。不外也是较量理想的。

由于想提升一下自己的C语言才干,以是用C重新写了一下随机天生字符串。

华夏棋牌 其中用到了随机数函数srand(),rand();

华夏棋牌 不外折腾一两个小时,随机数还是有用果。并发会见不时间能够简直为同时,那么srand给的种子时间可以视为类似的。这样就招致了,发生的随机数也是一样的。从而发生的随机字符串也是一样的。循环输入随机字符串,简直都是千篇一概的。

厥后想到了ukey,这个扩年夜可以完成唯一的ID,那么会见都发生唯一的ID,是不是可以将这个ID作为种子时间。谜底是一定的。


华夏棋牌



上图是发生的随机字符串,可以自界说长度。也异常可以输入只有数字的字符串。相较PHP所发生的随机字符串重复率更低且速率更快。


a

PHP_FUNCTION(get_random__num_str)
{
   int length=8;
     
   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &length) == FAILURE) 
   {
    length=8;
       
   }
   length++;
  int flag, i; 
  char* string; 
  __uint64_t timestamp = realtime();
  __uint64_t retval;
  int len;
  char buf[128];
   
  if (timestamp == 0ULL) {
    RETURN_FALSE;
  }
   
  spin_lock(lock, pid);
   
  if (context->last_timestamp == timestamp) {
    context->sequence = (context->sequence + 1) & context->sequence_mask;
    if (context->sequence == 0) {
      timestamp = skip_next_millis();
    }
   
  } else {
    context->sequence = 0; /* Back to zero */
  }
   
  context->last_timestamp = timestamp;
   
  retval = ((timestamp - context->twepoch) << context->timestamp_left_shift)
      | (context->datacenter_id << context->datacenter_id_shift)
      | (worker_id << context->worker_id_shift)
      | context->sequence;
   
  spin_unlock(lock, pid);
  //printf('%ld',retval);
  srand((unsigned)retval);
  //srand((unsigned) time(NULL )); 
  if ((string = (char*) emalloc(length)) == NULL ) 
  { 
    //myLog("Malloc failed!flag:14\n"); 
    RETURN_NULL() ; 
  } 
    
  for (i = 0; i < length - 1; i++) 
  { 
    flag = rand() % 3; 
       
    switch (flag) 
    { 
      case 0: 
        string[i] = '1' + rand() % 5; 
        break; 
      case 1: 
        string[i] = '2' + rand() % 7; 
        break; 
      case 2: 
        string[i] = '0' + rand() % 10; 
        break; 
      default: 
        string[i] = '9'; 
        break; 
    } 
       
       
       
  } 
  string[length - 1] = '\0'; 
  RETURN_STRINGL(string,length,0);
}
 PHP_FUNCTION(get_random_str)
{
   int length=8;
     
   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &length) == FAILURE) 
   {
    length=8;
       
   }
   length++;
  int flag, i; 
  char* string; 
  __uint64_t timestamp = realtime();
  __uint64_t retval;
  int len;
  char buf[128];
   
  if (timestamp == 0ULL) {
    RETURN_FALSE;
  }
   
  spin_lock(lock, pid);
   
  if (context->last_timestamp == timestamp) {
    context->sequence = (context->sequence + 1) & context->sequence_mask;
    if (context->sequence == 0) {
      timestamp = skip_next_millis();
    }
   
  } else {
    context->sequence = 0; /* Back to zero */
  }
   
  context->last_timestamp = timestamp;
   
  retval = ((timestamp - context->twepoch) << context->timestamp_left_shift)
      | (context->datacenter_id << context->datacenter_id_shift)
      | (worker_id << context->worker_id_shift)
      | context->sequence;
   
  spin_unlock(lock, pid);
  //printf('%ld',retval);
  srand((unsigned)retval);
  //srand((unsigned) time(NULL )); 
  if ((string = (char*) emalloc(length)) == NULL ) 
  { 
    //myLog("Malloc failed!flag:14\n"); 
    RETURN_NULL() ; 
  } 
    
  for (i = 0; i < length - 1; i++) 
  { 
    flag = rand() % 3; 
       
    switch (flag) 
    { 
      case 0: 
        string[i] = 'A' + rand() % 26; 
        break; 
      case 1: 
        string[i] = 'a' + rand() % 26; 
        break; 
      case 2: 
        string[i] = '0' + rand() % 10; 
        break; 
      default: 
        string[i] = 'x'; 
        break; 
    } 
       
       
       
  } 
  string[length - 1] = '\0'; 
  RETURN_STRINGL(string,length,0);
}









上图是PHP天生18W随机字符串所用的时间

上图是C扩年夜天生18W随机字符串所用的时间

所用的服务器都是1G内存 双核的阿里云服务器。

只需在ukey中加入上如代码便可以临盆随机字符串和随机长度数字字符串,PHP唯一ID天生扩年夜ukey。

华夏棋牌 php.ini的装备项:

[ukey]
ukey.datacenter = integer
ukey.worker = integer
ukey.twepoch = uint64


datacenter装备项是一个整数, 用于设置数据中央;
worker装备项是一个整数, 用于设置数据中央的机械序号;
华夏棋牌twepoch装备项是一个64位的整数, 用于设置时间戳基数, 此值越年夜, 天生的ID越小;

装配:

$ cd ./ukey
$ phpize
$ ./configure
$ make
$ sudo make install

Ukey供应3个有用的函数:

ukey_next_id() -- 用于天生唯一ID

ukey_to_timestamp(ID) -- 用于将ID转换成时间戳
ukey_to_machine(ID) -- 用于将ID转换成机械信息

应用实例:

<?php
$id = ukey_next_id();
echo $id;
   
$timestamp = ukey_to_timestamp($id);
echo date('Y-m-d H:i:s', $timestamp);
   
$info = ukey_to_machine($id)
var_dump($info);
?>

以上就是PHP 随机数 C扩年夜随机数的内容,更多相关内容请关注华夏棋牌-万豪棋牌电玩城-微信娱乐棋牌(mbkdubai.com)!

php中文网最新课程二维码
  • 相关标签:PHP ,C扩年夜随机数
  • 本文原创宣布php中文网 ,转载请注明出处,谢谢您的尊重!
  • 相关文章


  • PHP若何装配和装备?
  • php 和 python 语法(部门)上的差异
  • PHP 随机数 C扩年夜随机数
  • PHP查询相近的人及其距离的完成措施_php手艺
  • PHP 随机数 C扩年夜随机数
  • 网友议论

    文明上彀理性语言,请遵守 新闻议论服务协定

    我要议论

    独孤九贱(5)_ThinkPHP5视频教程

    华夏棋牌ThinkPHP是国际最盛行的中文PHP开发框架,也是您Web项目的最好选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架知识泉源,将...

    • 2017-05-16 12:03:57
    • 点击数(172386)

    独孤九贱(4)_PHP视频教程

    江湖传言:PHP是天下上最好的编程语言。真的是这样吗?这个梗现实是从哪来的?学会本课程,你就会明确了。 华夏棋牌-万豪棋牌电玩城-微信娱乐棋牌出品的PHP入门系统教授修养视频,完全从初学者的角度出发,绝不玩虚的,一切以适用、有用...

    • 2017-03-20 22:47:17
    • 点击数(168621)

    独孤九贱(1)_HTML5视频教程

    华夏棋牌《php.cn原创html5视频教程》课程特点:php中文网原创滑稽段子系列课程,以恶弄,段子为主题气焰气焰的php视频教程!轻松的教授修养气焰气焰,杂乱的教授修养形式,让同砚们在不知不觉中,学会了HTML知识。 ...

    • 2017-03-13 10:15:11
    • 点击数(136248)

    ThinkPHP5实战之[教授修养治理系统]

    华夏棋牌本套教程,以一个真实的黉舍教授修养治理系统为案例,手把手教会您怎样在一张白纸上,从零泉源,一步一步的用ThinkPHP5框架快速开发出一个商业项目。

    • 2017-07-24 16:48:56
    • 点击数(129231)

    PHP入门视频教程之一周学会PHP

    一切盘算机语言的学习都要从根原泉源,《PHP入门视频教程之一周学会PHP》不只是PHP的基础部门更主要的是PHP语言的焦点手艺,是学习PHP必须控制的内容,任何PHP项目的完成都离不开这部门的内容,通...

    • 2016-11-16 14:54:14
    • 点击数(128701)

    作者信息

    相关视频教程

  • javascript低级视频教程
  • jquery 基础视频教程
  • javascript三级联动视频教程
  • 独孤九贱(3)_JavaScript视频教程
  • 独孤九贱(6)_jQuery视频教程
  • 相关视频章节