`

(转)生成不重复随机字符串

 
阅读更多

今天学了一个随机字符串的生成方法,可以生成任意长度的随机字符串,重复的概率很小。如下:

package random;

import java.util.Random;

public class RandomNum {
    private static char ch[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
            '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
            'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
            'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
            'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
            'z', '0', '1' };//最后又重复两个0和1,因为需要凑足数组长度为64

    private static Random random = new Random();

    //生成指定长度的随机字符串
    public static String createRandomString(int length) {
        if (length > 0) {
            int index = 0;
            char[] temp = new char[length];
            int num = random.nextInt();
            for (int i = 0; i < length % 5; i++) {
                temp[index++] = ch[num & 63];//取后面六位,记得对应的二进制是以补码形式存在的。
                num >>= 6;//63的二进制为:111111
                // 为什么要右移6位?因为数组里面一共有64个有效字符。为什么要除5取余?因为一个int型要用4个字节表示,也就是32位。
            }
            for (int i = 0; i < length / 5; i++) {
                num = random.nextInt();
                for (int j = 0; j < 5; j++) {
                    temp[index++] = ch[num & 63];
                    num >>= 6;
                }
            }
            return new String(temp, 0, length);
        } else if (length == 0) {
            return "";
        } else {
            throw new IllegalArgumentException();
        }
    }
   
    //根据指定个数,测试随机字符串函数的重复率
    public static double rateOfRepeat(int number){
        int repeat=0;
        String[] str=new String[number];
        for(int i=0;i<number;i++){//生成指定个数的字符串
            str[i]=RandomNum.createRandomString(10);
        }
        for(int i=0;i<number;i++){//查找是否有相同的字符串
            for(int j=i+1;j<number-1;j++){
                if(str[i].equals(str[j]))
                    repeat++;
            }
        }
        return ((double)repeat)/number;
    }

    public static void main(String[] args) {
        System.out.println(RandomNum.createRandomString(10));
        double rate=RandomNum.rateOfRepeat(10000);//测试10000次的重复率
        System.out.println("重复率:"+rate);
    }
}

 
我得到的几个结果都是0.0

 

转自http://g.kehou.com/t1007615389.html

分享到:
评论

相关推荐

    PHP生成指定数量的不重复随机字符串

    可以生成指定数量的不重复随机字符串,支持纯数字、字母和数字组合、字母数字加特殊字符

    C#生成不重复随机字符串类

    总结来说,C#生成不重复随机字符串类通过巧妙地结合时间和类变量作为随机数种子,以及对数字和字母的条件判断,实现了多样化且不重复的字符串生成。这对于创建验证码、ID或任何需要独特标识符的场景都非常有用。...

    生成随机字符串(字符串,数字)

    例如,如果需要生成的随机字符串在特定范围内不能重复,可以使用集合(如HashSet)来检查新生成的字符串是否已存在。若要保证字符分布更均匀,可以使用更复杂的随机数生成算法,或者对生成的字符串进行一定的调整。 ...

    C#随机字符串生成代码

    在C#编程语言中,生成随机字符串是一项常见的任务,它在许多应用场景中都有用到,例如测试数据的生成、密码的生成以及唯一标识符的创建等。本篇将深入探讨如何在C#中生成指定长度、包含字母或数字或者两者的混合随机...

    C#随机生成不重复字符串的两个不错方法

    在C#编程中,有时我们需要生成不重复的随机字符串,这在各种应用场景中都很常见,如验证码、唯一标识符或密码生成等。这里介绍两种不同的方法来实现这一目标。 方法一:生成不重复的数字字符串 这个方法的核心是...

    随机字符串自动生成器

    随机字符串是由各种字符(包括字母、数字和特殊符号)随机组合而成的序列,每个字符的选取是基于一定的随机性原则,确保每次生成的结果不固定。在编程中,通常使用内置的随机数生成函数来实现这一功能。 在“随机...

    C# 生成随机字母字符串

    首先,要生成随机字符串,我们需要使用C#中的`System.Random`类来生成随机数。这个类提供了多种方法来生成指定范围内的整数,我们可以利用这些整数来选择字母表中的字符。在ASCII码中,小写字母的范围是97('a')到...

    C#生成不重复字母数字组合的随机数

    在C#编程中,生成不重复的字母数字组合是一个常见的需求,这可能涉及到密码生成、唯一标识符创建或数据加密等多个领域。在这种情况下,我们通常会利用C#的内置类和方法来实现这一功能。标题提到的是“C#生成不重复...

    php 随机生成10位字符代码

    掌握这些知识点后,我们可以实现一个通用的随机字符串生成器,只需调整`$len`的值,即可自定义生成任意长度的随机字符串。此外,为了安全和多样性,根据实际应用场景还可以考虑在字符集中加入特殊字符,进一步增强...

    易语言快速取随机字符源码

    4. **循环结构**:为了生成指定长度的随机字符串,通常需要使用循环结构,如`重复`或`直到`循环。在循环内部,每次迭代都会生成一个新的随机字符并添加到结果字符串中。 5. **条件判断**:如果需要限制某些字符的...

    易语言快速取随机字符

    例如,如果要生成包含英文大写字母、小写字母和数字的随机字符,我们可以定义三个字符串变量,分别存储这些字符集,然后通过循环和随机数选择字符。 以下是一个基本的实现思路: 1. 定义三个字符串,分别存储英文...

    java开发技术调用rendom函数,随机生成32位不重复的字符

    在main方法中,我们使用了一个循环来生成50个32位随机字符串,然后将生成的随机字符串打印出来。 四、优点和缺点 使用Random函数生成随机数的优点是非常简单方便,代码量少,效率高。但是,使用Random函数生成...

    字符串随机生成小软件

    在加密算法的实现和评估中,随机字符串也是必不可少的,用于生成密钥和测试数据。 总的来说,这个“字符串随机生成小软件”是一个实用的工具,可以帮助开发者和测试人员快速生成所需的随机字符串,提高工作效率并...

    生成随机字符串1

    在IT行业中,生成随机字符串是一项常见的任务,尤其是在创建唯一标识符、加密、安全令牌或测试数据时。在Java中,我们可以使用多种方法来生成随机字符串。这里我们将详细讨论一种常见的方式,即通过UUID类来生成。 ...

    Js生成随机数/随机字符串的方法小结【5种方法】

    JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它提供了多种方式来生成随机数或随机字符串。在本文中,我们将探讨五种不同的方法来实现这一功能。 **第一种方法:使用Math.random()生成随机字符串** `...

    Java生成含字母和数字的6位随机字符串

    在Java编程中,生成含字母和数字的随机字符串是一种常见的需求,例如用于验证码、唯一标识符等场景。标题提到的"Java生成含字母和数字的6位随机字符串",就是指通过编程方式创建一个长度为6的字符串,其中包含大小写...

    利用时间生成8位不重复数

    在IT开发领域,生成不重复的编号或标识符是一个常见的需求,特别是在数据库记录、订单号、唯一用户ID等场景。为了满足这一需求,开发者经常利用系统时间作为基础,结合其他算法来生成这样的唯一序列。标题提到的...

    php生成随机数/生成随机字符串的方法小结【5种方法】

    在示例中,`GetRandStr` 函数使用 `mt_rand()` 生成0到字符串长度减1之间的随机数,作为索引获取字符串 `$str` 中的字符,从而生成随机字符串。 ```php function GetRandStr($length) { $str = '...

Global site tag (gtag.js) - Google Analytics