为了账号安全,请及时绑定邮箱和手机立即绑定

一些PHP生成唯一字符串的方法

标签:
PHP
<?php

/* 设置页面内容是html编码格式 */
header('Content-Type:text/html; charset=utf-8');

/**
 * 生成32位的唯一字符串
 */
function unique_name() {

    return md5(uniqid(mt_rand(), true));

}

/**
 * 生成毫/微秒的时间戳
 */
function microtime_float() {

    /* 微秒 */
    list($usec, $sec) = explode(' ', microtime());

    /* 非科学计数法 */
    return array('ms'=>microtime(true)*10000, 'mi'=>sprintf("%.0f", ((float)$usec + (float)$sec)*100000000), );

}

/**
 * 生成指定位数的随机数
 */
function random_number( $a = array('can_zero_start'=>null,'length'=>null,'prefix'=>null,'suffix'=>null,) ){

    /* 允许0开头 */
    $can_zero_start = isset($a['can_zero_start']) ? $a['can_zero_start'] : true;

    if ( $can_zero_start ) {

        $num = mt_rand( 0, 9 );

    } else {

        $num = mt_rand( 1, 9 );

    }

    /* 长度 */
    $length = isset($a['length']) ? $a['length'] : 8;

    for ( $i = 0 ; $i < $length-1 ; $i++ ) {

        $num .= mt_rand( 0, 9 );

    }

    /* 前缀 */
    $prefix = isset($a['prefix']) ? $a['prefix'] : null;

    /* 后缀 */
    $suffix = isset($a['suffix']) ? $a['suffix'] : null;

    return $prefix . $num . $suffix;

}

/**
 * 生成验证码
 */
function verification_code( $a = array('length'=>null,'number_case'=>null,'lower_case'=>null,'upper_case'=>null,'chinese'=>null,) ) {

    /* 字符库 */
    $number_str_all = '0123456789';

    $number_str = '23456789';

    $lower_case_str = 'abcdefghijkmnpqrstuvwxyz';

    $upper_case_str = 'ABCDEFGHJKLMNPQRSTUVWXYZ';

    $chinese_library = chinese_library();

    /* 含有数字 */
    $number_case = isset($a['number_case']) ? $a['number_case'] : true;

    /* 含有小写字母 */
    $lower_case = isset($a['lower_case']) ? $a['lower_case'] : true;

    /* 含有大写字母 */
    $upper_case = isset($a['upper_case']) ? $a['upper_case'] : true;

    /* 中文 */
    $chinese = isset($a['chinese']) ? $a['chinese'] : false;

    /* 拼接字符库 */
    if ( $chinese or ( $number_case == false and $lower_case == false and $upper_case == false ) ) {

        $str = $chinese_library['str'];

    } elseif ( $number_case == true and $lower_case == false and $upper_case == false ) {

        $str = $number_str_all;

    } elseif ( $number_case != true or $lower_case != false or $upper_case != false ) {

        $str = null;

        if ( $number_case ) $str .= $number_str;

        if ( $lower_case ) $str .= $lower_case_str;

        if ( $upper_case ) $str .= $upper_case_str;

    }

    /* 长度 */
    $length = isset($a['length']) ? $a['length'] : 4;

    /* 拼接验证码 */
    $array_rand_val = array_rand_val( array('data'=>$str,'length'=>$length,'repeat'=>true,) );

    return array('code'=>$array_rand_val['str'],'code_arr'=>$array_rand_val['arr'],);

}

/**
 * 生成中文验证码(包括候选码)
 */
function chinese_code( $a = array('length_code'=>null,'length_candidate'=>null,) ) {

    /* 验证码长度 */
    $length_code = isset($a['length_code']) ? $a['length_code'] : 2;

    /* 候选码长度 */
    $length_candidate = isset($a['length_candidate']) ? $a['length_candidate'] : 9;

    /* 如果填反了 */
    if ( $length_code > $length_candidate ) {

        list($length_code, $length_candidate) = array($length_candidate, $length_code);  

    }

    /* 生成候选码 */
    $chinese_library = chinese_library();

    $candidate = array_rand_val( array('data'=>$chinese_library['arr'], 'length'=>$length_candidate, 'repeat'=>false, ) );

    /* 生成验证码 */
    $code = array_rand_val( array('data'=>$candidate['arr'],'length'=>$length_code,'repeat'=>false,) );

    return array('code_str'=>$code['str'], 'candidate_str'=>$candidate['str'], 'code_arr'=>$code['arr'], 'candidate_arr'=>$candidate['arr'], );

}

/**
 * 汉字库
 */
function chinese_library() {

    /* 字符串 */
    $str = '的一是了不人在他有这个上们来到时大地为子中你说生国年着就那和要她出也得里后自以会家可下而过天去能对小多然于心学么之都好看起发当没成只如'
    .'事把还用第样道想作种开美总从无情己面最女但现前些所同手又行意动方期它头经长儿回位分爱老因很给名法间斯知世什两次使身者被高已亲其进此话常与活正感';

    /* 数组 */
    preg_match_all('/./u',$str,$arr);

    /* 返回 字符串 & 数组 */
    return array( 'arr'=>$arr[0], 'str'=>$str,);

}

/**
 * 随机获取 数组/字符串 中的值/字符
 */
function array_rand_val( $a = array('data'=>null,'length'=>null,'repeat'=>null,) ) {

    /* 转数组 */
    if ( !isset($a['data']) ) {

        $arr = array(1,2,3);

    } elseif ( !is_array($a['data']) ) {

        preg_match_all('/\S/u', $a['data'], $b);

        $arr = $b[0];

    } elseif ( is_array($a['data']) ) {

        $arr = $a['data'];

    }   

    /* 可重复吗 */
    $repeat = isset($a['repeat']) ? $a['repeat'] : false;

    /* 获取个数 */
    $length = isset($a['length']) ? $a['length'] : 1;

    if ( $repeat ) {

        $return_arr = array();

        for ( $i = 0; $i < $length; $i++ ) {

            /* 随机键名的值 */
            $return_arr[] = $arr[array_rand($arr)];

        }

    } elseif ( !$repeat ) {

        /* 打乱 */
        shuffle($arr);

        /* 获取 */
        $return_arr =  array_slice($arr, 0, $length);

    }

    return array('arr'=>$return_arr, 'str'=>implode($return_arr), );

}
点击查看更多内容
3人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
PHP开发工程师
手记
粉丝
1
获赞与收藏
33

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消