比如下单之后要产生一个订单号,按年月日+四位随机数,不重复。请高人指点

解决方案 »

  1.   

    用ssh架构我会在action里
    设一个参数=new Date()转为String+ random(10000)转为String
    Date()显示的format可以自行设定
      

  2.   

    我这里真好有一个
    private String GenerateSerialNum(){
     Double dRandom = new Double(10000*Math.random());
        Integer iRandom = new Integer(dRandom.intValue()); String sSerialNum = rot13(CMyDateTime.now().toString("yyyyMMdd") + iRandom.toString()).toLowerCase();
    return sSerialNum;
    }
      

  3.   

    怕的就是Math.random()会产生相同的随机数,2楼说的当天的订单表中读出订单号  然后流水号+1 ,要考虑到数据库的并发性,这样得到的也不是太准确
      

  4.   

    写一个singleton模式,里边有一个同步的获取随机订单编号的方法,可以解决并发访问问题
    呃,精确到年月日,后加四位随机数订单,如果高并发,随机数可能会重复,就是存入数据库生成订单编号时查一下数据库也有可能会重复的(也就是从0000-9999名额有限...)
    最好是精确到年月日时分秒+随机数,这样出现的可能性小一些...
      

  5.   


      insert 方法  事务控制就可以了
      

  6.   

    这样不行吗?用当时的时间转换成long当随机数Calendar   cal   =  Calendar.getInstance();   
    Date   date   =   cal.getTime();
    long timestamps = date.getTime() ;
      

  7.   

    其实还可以考虑用UUID产生32位的字符串的方法嘛,这个是很难重复的,我们公司用了这么久都没有重复过
      

  8.   


    public class CreateOrderId {
        
        // 获得日期
        public String getTimeStamp() {
            String temp = null;
            SimpleDateFormat sdf = new SimpleDateFormat(“yyyyMMdd”);
            temp = sdf.format(new java.util.Date());
            return temp;
        }
        
        public String getOrderId() {
            
            StringBuffer buf = new StringBuffer();
            
            buf.append(this.getTimeStamp());    // 时间
            
            Random rand = new Random();         
            for (int i=0;i<4;i++) {             // 四位随机数
                buf.append(rad.nextInt(10));
            }
            
            rturn buf.toString();
        }
        
        // 测试
        public static void main(String args[]) {
            
           CreateOrderId createOrderId = new CreateOrderId();
           
           String orderid = createOrderId.getOrderId();
           
           System.out.println(orderid);
        }
    }
      

  9.   

    As Long As U Want
    但是长的要有意义
      

  10.   


    public class UID { //定义一个最大增长数
    private static final int MAX_COUNT = 99999;
        //定义用于递增的参数
    private static int generateCount = 0; /**
     * 获取唯一的UID号
     * 
     * 
     * @return 14-18位的唯一UID号
         */
    public static synchronized String getUID() { if (generateCount > MAX_COUNT)
    generateCount = 0;
    String uniqueNumber = Long.toString(System.currentTimeMillis())
    + Integer.toString(generateCount);
    generateCount++; //假如超过32位的话,只取后32位
    if (uniqueNumber.length() > 32) {
    uniqueNumber = uniqueNumber.substring(uniqueNumber.length() - 32);
    } return uniqueNumber;

    }}
      

  11.   

    按年月日+数据库的表的主键ID, ID用序列生成。就肯定不会有重复了
      

  12.   

    new Random().nextInt(8999) + 1000; 四位随机数
      

  13.   

    /*
     * 获取用户的唯一表示序列号
     */
    public static String GetPlayerIndex()
    {
    String strindex = "";
    Random random = new Random();   

    for( int i=0;i<18;i++ )
    {
    int rand = GetRandomValue(0, 1);
    if( rand == 0 )
    {
    //字母
    int choice = random.nextInt(2) % 2 == 0 ? 65 : 97; //取得大写字母还是小写字母   
    strindex += (char) (choice + random.nextInt(26));   
    }
    else if( rand == 1 )
    {
    //数字
    strindex += GetRandomValue(1, 11);
    }
    }
    //判断生成的随机数是否重复
    if( PlayerIndexList.isSame( strindex ) )
    GetPlayerIndex();
    return strindex;
    }
    正好自己有写的一个差不多的类