Java获取唯一值的方法

1. 通过nanoTime()方法获得

      /**
         * 第一种方式:通过nanoTime()方法获得
         * 通过System类的nanoTime()方法产生,理论上存在重复的可能,实际不会重复(至少短期内的CPU运行速度同时生成还不会达到重复)
         */
        public String uniqueCodeOne()
        {
            long n=System.nanoTime();
        //        Random random=new Random();
        //        String n=System.nanoTime()+""+random.nextInt();
        //      System.out.println(n);
            return String.valueOf(n);
        }

2.通过UUID类

       /**
         * 第二种方式:通过UUID类(表示通用唯一标识符的类)获得唯一值,UUID表示一个128位的值
         * 
         */
        public String uniqueCodeTwo()
        {
            String s=UUID.randomUUID().toString();
        //        System.out.println(s);
            return s;
        }

关于UUID的简单介绍

UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份。UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库建立时的名称重复问题。目前最广泛应用的 UUID,即是微软的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的应用,则有 Linux ext2/ext3 档案系统、LUKS 加密分割区、GNOME、KDE、Mac OS X 等等。

UUID.randomUUID().toString()是javaJDK提供的一个自动生成主键的方法。UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的,是由一个十六位的数字组成,表现出来的形式。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。

import java.util.UUID;
 
/**
 * 
 * @author humf
 */
public class UploadUtils {
	
	/**
	 * 传入文件的名称,返回的唯一的名称
	 * 例如:gril.jpg	返回sdjsljfsjdl.jpg
	 * @param filename
	 * @return
	 */
	public static String getUUIDName(String filename){
		// 先查找
		int index = filename.lastIndexOf(".");
		// 截取
		String lastname = filename.substring(index, filename.length());
		// 唯一 字符串  fsd-sfsdf-sfsd-sdfsd
		String uuid = UUID.randomUUID().toString().replace("-", "");
		return uuid+lastname;
	}
	
	public static void main(String[] args) {
		String filename = "girl.jpg";
		String uuid = getUUIDName(filename);
		System.out.println(uuid);
	}
}

3. 采用数据指纹

     /**
         * 第三种方式:采用数据指纹
         * @throws NoSuchAlgorithmException 
         * 
         */
        public String uniqueCodeThree() throws NoSuchAlgorithmException
        {
            String s=UUID.randomUUID().toString();
            //先进行MD5加密
            MessageDigest md=MessageDigest.getInstance("md5");
            //对数据进行加密
            byte[] bs=md.digest(s.getBytes());
            //采用数据指纹进一步加密,拿到的数据成为数据指纹
            BASE64Encoder base=new BASE64Encoder();    
            String digitFingerprint=base.encode(bs);
            //System.out.println(digitFingerprint);
            return digitFingerprint;
        }
    }
发布了213 篇原创文章 · 获赞 12 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/a1003434346/article/details/103555359
今日推荐