存档

文章标签 ‘生成’

php新建随机图片或者文件保存文件名,可以防止不重复。

2017年9月26日 没有评论

php新建随机图片或者文件保存文件名,可以防止不重复。请使用以下函数。如果需要可以稍作修改。

function randPicName(){
$time=explode(‘ ‘,microtime());
return $time[1].sprintf(‘%06u’,substr($time[0],2,6)).mt_rand(100000,999999).substr(‘0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’,(mt_rand(0,61)),1).substr(‘0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’,(mt_rand(0,61)),1);
}

分类: php学习 标签: , ,

php实现生产不重复的6位数字+2位字母

2016年4月21日 没有评论

最近要实现一个功能,用php生产一个8位不重复的编号(前2位是字母,后6位是数字),用了2套方案:

第一套是实现按数字增长,比如:

AA000000->AA000001->…->AA999999->AB000000->AB000001->…->YY999999

第二套是实现按字母增长后增长数字,比如:

AA000000->AB000000->…->AY000000->AA000001->AB000001->…->YY999999

方法1:

function getNewBindCode($oldCode){
if(empty($oldCode)){return ‘AA000000’;}
$old_en_1=substr($oldCode,0,1);
$old_en_2=substr($oldCode,1,1);
$old_shuzi=intval(substr($oldCode,2));
if($old_shuzi==999999){
$enToShuzi=array(‘A’=>1,’B’=>2,’C’=>3,’D’=>4,’E’=>5,’F’=>6,’G’=>7,’H’=>8,’J’=>9,’K’=>10,’L’=>11,’M’=>12,’N’=>13,’P’=>14,’Q’=>15,’R’=>16,’S’=>17,’T’=>18,’U’=>19,’V’=>20,’W’=>21,’X’=>22,’Y’=>23);
$old_en_1=$enToShuzi[$old_en_1];
$old_en_2=$enToShuzi[$old_en_2];
if($old_en_2==23){$new_en_1=$old_en_1+1;$new_en_2=1;}
else {$new_en_1=$old_en_1;$new_en_2=$old_en_2+1;}
$new_en=array_search($new_en_1,$enToShuzi).array_search($new_en_2,$enToShuzi);
$new_shuzi=’000000′;
}
else {$new_en=$old_en_1.$old_en_2;$new_shuzi=$old_shuzi+1;}
switch(strlen($new_shuzi)){
case 1:$new_shuzi=’00000′.$new_shuzi;break;
case 2:$new_shuzi=’0000′.$new_shuzi;break;
case 3:$new_shuzi=’000′.$new_shuzi;break;
case 4:$new_shuzi=’00’.$new_shuzi;break;
case 5:$new_shuzi=’0′.$new_shuzi;break;
}
return $new_en.$new_shuzi;
}

方法2:

function getNewBindCode($oldCode){
if(empty($oldCode)){return ‘AA000000’;}
$enToShuzi=array(‘A’=>1,’B’=>2,’C’=>3,’D’=>4,’E’=>5,’F’=>6,’G’=>7,’H’=>8,’J’=>9,’K’=>10,’L’=>11,’M’=>12,’N’=>13,’P’=>14,’Q’=>15,’R’=>16,’S’=>17,’T’=>18,’U’=>19,’V’=>20,’W’=>21,’X’=>22,’Y’=>23);
$old_en_1=$enToShuzi[substr($oldCode,0,1)];
$old_en_2=$enToShuzi[substr($oldCode,1,1)];
$old_shuzi=intval(substr($oldCode,2));
if($old_en_2==23){//是Y
if($old_shuzi==999999){$new_en_1=$old_en_1+1;$new_en_2=1;$new_shuzi=0;}
else {$new_en_1=$old_en_1;$new_en_2=1;$new_shuzi=$old_shuzi+1;}
}
else {$new_en_1=$old_en_1;$new_en_2=$old_en_2+1;$new_shuzi=$old_shuzi;}
switch(strlen($new_shuzi)){
case 1:$new_shuzi=’00000′.$new_shuzi;break;
case 2:$new_shuzi=’0000′.$new_shuzi;break;
case 3:$new_shuzi=’000′.$new_shuzi;break;
case 4:$new_shuzi=’00’.$new_shuzi;break;
case 5:$new_shuzi=’0′.$new_shuzi;break;
}
$new_en=array_search($new_en_1,$enToShuzi).array_search($new_en_2,$enToShuzi);
return $new_en.$new_shuzi;
}

使用方法:

第一次:echo getNewBindCode(”);

第二次以后,用上次得到的传入参数,echo getNewBindCode($preCode);

分类: php学习 标签: , , ,

php使用fast_uuid生成不重复的uuid

2016年1月4日 没有评论

/**
* fast_uuid 为模型生成 64 位整数或混淆字符串的不重复 ID
*
* 感谢“Ivan Tan|谭俊青 DrinChing (at) Gmail.com”提供的算法。
*
* 通常我们习惯使用自增字段来做主键,简单易用。
*
* 但在于大规模应用中,使用自增字段将难以实现分布式数据库架构。
* 并且对数据进行纵向和横向分割(分表分库)造成障碍。
* 此时最好的解决方案是使用 UUID。
*
* 但 UUID 不是每一种数据库都支持,用字符串来模拟效率太低。
* 并且如果通过 URL 传递,UUID 也显得太长。
*
* fast_uuid 方法提供了另一种解决方案:
* 使用 64bit 整数存储主键,主键由 fast_uuid 方法在创建记录时调用生成。
*
* 参数 suffix_len指定 生成的 ID 值附加多少位随机数,默认值为 3。
* 即便不附加随机数也不会生成重复 ID,但附加的随机数可以让 ID 更难被猜测。
*
* @param int suffix_len
*
* @return string
*/
function fast_uuid($suffix_len=3){
//! 计算种子数的开始时间
static $being_timestamp = 1336681180;// 2012-5-10

$time = explode(‘ ‘, microtime());
$id = ($time[1] – $being_timestamp) . sprintf(‘%06u’, substr($time[0], 2, 6));
if ($suffix_len > 0)
{
$id .= substr(sprintf(‘%010u’, mt_rand()), 0, $suffix_len);
}
return $id;
}

也可以使用简单版:
//在单服务器上能确保唯一,多服务器可以在前面加上服务器唯一标识,$suffix_len为增加的随机位数
function fast_uuid($suffix_len=0){
$time=explode(‘ ‘,microtime());
return ($time[1]-1451577600).sprintf(‘%06u’,substr($time[0],2,6)).($suffix_len>0?substr(sprintf(‘%010u’,mt_rand()),0,$suffix_len):”);//计算种子数的开始时间:2016-01-01
}

改良版:

function fast_uuid(){
$time=explode(‘ ‘,microtime());
return $time[1].sprintf(‘%06u’,substr($time[0],2,6));
}

分类: php学习 标签: , ,

php生成日期年月日文件夹(2种样式)

2015年7月21日 没有评论

php生成日期年月日文件夹(2种样式)

/*
style1:2015-01/01
style2:201501
*/
$start_year=2015;
$start_year_month=8;

$end_year=2016;

function month_path($m){
return $m<10?(‘0’.$m):$m;
}

for($i=$start_year;$i<=$end_year;$i++){
for($k=$start_year_month;$k<=12;$k++){
//style1
mkdir(‘style1/’.$i.’-‘.month_path($k));
$month_big_day=date(‘t’,strtotime($i.’-‘.month_path($k)));
for($g=1;$g<=$month_big_day;$g++){
mkdir(‘style1/’.$i.’-‘.month_path($k).’/’.month_path($g));
}

//style2
mkdir(‘style2/’.$i.month_path($k));

}
$start_year_month=1;
}

分类: php学习 标签: , ,

php自动生成年月份文件夹

2015年3月14日 没有评论

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>Untitled Document</title>
</head>

<body>
<?php
set_time_limit(0);

$nian_start=2013;
$nian_end=2014;
$base_dir=”upload/zhenjia/”;

for($i=$nian_start;$i<=$nian_end;$i++){
//创建年文件夹
mkdir($base_dir.$i);
for($k=1;$k<=12;$k++){
//创建月文件夹
mkdir($base_dir.$i.”/”.($k<10?”0″.$k:$k));

//获取月份最大天数
$max_day=date(“t”,strtotime($i.”-“.($k<10?”0″.$k:$k)));
for($m=1;$m<=$max_day;$m++){
//创建日文件夹
mkdir($base_dir.$i.”/”.($k<10?”0″.$k:$k).”/”.($m<10?”0″.$m:$m));
}
}
}

die(“create ok”);
?>
</body>
</html>

分类: php学习 标签: , ,
css.php