Можна так String iD = (YYYYMMDDhhmmssSSS + random(5) + контрольная сумма)
public void createUnicalNumber() {
Calendar cal = Calendar.getInstance();
SimpleDateFormat format1 = new SimpleDateFormat("YYYYMMDDHHmmssSSS");
cal.add( Calendar.DATE, (0) );
String dataNew = format1.format( cal.getTime() );
String dataAdd = createWord(5);
String dataContr = contSumm(dataNew+dataAdd);
do {
dataContr = "0"+dataContr;
} while (dataContr.length()<5);
System.out.println( dataNew+dataAdd+dataContr );
}
private String contSumm( String str){
int n_cont=0;
for(int countStr =0; countStr<str.length();countStr++) {
n_cont+=str.charAt( countStr );
}
String dxshxs=String.valueOf( n_cont );
return dxshxs;
}
private String createWord (int l){
String word ="";
for (int x=0; x<l; x++ ) {
int bukva = 65 +((int) Math.round(Math.random()*25));// 25 длина символьного ряда в кодовой таблице
char one_char = (char) bukva;
word += one_char;
}
return word;
}
Выглядит так : 20180104113747719XKSAN01261
Виден момент формирования и дополненно контрольной суммой для исключения одиночной ошибки . Данный код можно проверить. Пишите - отвечу как.