2015-01-08 3 views
4

무작위로 생성 된 16 자리 숫자를 java.But에서 만들고 싶습니다. 첫 번째 두 자리가 "52"가되어야합니다. 예 : 89-7894-2435-1967. 난수 생성기를 사용하여 14 자리 숫자를 만든 다음 정수를 더한다. 5200 0000 0000 0000. 비슷한 문제를 찾으려고 노력했지만 유용하다고 생각하지 못했습니다. 나는 수학적 방법에 익숙하지 않다. 아마도 나를 위해 문제를 해결할 수있을 것이다.첫 번째 숫자가 임의의 16 자리 숫자를 만드는 방법은 무엇입니까?

+4

(의사) 난수 생성. 접두사 '52'로 붙이시겠습니까? – matcheek

+0

하나의 Google 검색. 나머지는 이것으로 쉬워야합니다. http://stackoverflow.com/questions/3709521/how-do-i-generate-a-random-n-digit-integer-in-java-using-the-biginteger-class –

+0

예, 생각했습니다. 뿐만 아니라 어떻게해야할지 모르겠다. 이것은 내 문제였다. –

답변

4

, 당신은 당신이 할 것 같은, 임의의 14 자리 번호를 생성해야합니다

long first14 = (long) (Math.random() * 100000000000000L); 

그런 다음 당신이 처음에 52를 추가합니다.

long number = 5200000000000000L + first14; 

똑같이 잘 작동하고 Math.random() 내부 Random 객체 생성하기 때문에, 메모리를 절약 할 또 다른 방법 : nextLong() % nMath.random() 달리 완벽하게 무작위 분포를 제공하지 않습니다

//Declare this before you need to use it 
java.util.Random rng = new java.util.Random(); //Provide a seed if you want the same ones every time 
... 
//Then, when you need a number: 
long first14 = (rng.nextLong() % 100000000000000L) + 5200000000000000L; 
//Or, to mimic the Math.random() option 
long first14 = (rng.nextDouble() * 100000000000000L) + 5200000000000000L; 

참고. 그러나 테스트 데이터를 생성하고 암호로 안전 할 필요는 없지만 올바르게 작동합니다. 사용하는 것은 당신에게 달려 있습니다.

0
  • 임의의 14 자리 숫자를 만듭니다. Math.random
  • 처음에 "52"String에 연결하십시오.
  • Integer.parseInt(String) 방법
+0

불행히도 첫 번째 단계를 수행하는 방법을 설명하지 않았습니다. 'Random.nextLong()'은'Random.nextInt (bound)'와 달리 바인딩을 지정할 수 없으므로 사소한 일이 아닙니다. – ajb

+0

거기에 대한 많은 예제가 있습니다 ... 나는 생각하기에 충분하다고 생각합니다 ... –

2

당신은 14 개 임의의 숫자를 생성 한 후 시작 "(52)"에 추가 할 수 있습니다로 문자열을 변환합니다. 예 : 먼저

public class Tes { 

    public static void main(String[] args) { 
     System.out.println(generateRandom(52)); 
    } 

    public static long generateRandom(int prefix) { 
     Random rand = new Random(); 

     long x = (long)(rand.nextDouble()*100000000000000L); 

     String s = String.valueOf(prefix) + String.format("%014d", x); 
     return Long.valueOf(s); 
    } 
} 
+0

'5200000000000000' (+ 또는 - 약간의 0)을'x'에 추가하여'52'를 추가 할 수 있습니다. 'String' 프로세스를 사용하여 숫자를 추가하고 싶지는 않습니다. 그것은 나에게 청결한 느낌. –

+0

사실, 'String'을 사용하여 접두사를 추가 한 코드는 잘못되었습니다. 'x'가 10^13보다 작 으면 실패합니다. 'String.format ("% 014d", x)'와 같은 것이 필요합니다. – ajb

+0

@ajb 감사합니다. – sol4me

3
Random rand = new Random(); 
String yourValue = String.format((Locale)null, //don't want any thousand separators 
         "52%02d-%04d-%04d-%04d", 
         rand.nextInt(100), 
         rand.nextInt(10000), 
         rand.nextInt(10000), 
         rand.nextInt(10000)); 
관련 문제