Home > Software engineering >  How to generate 15 digit random number using Scala
How to generate 15 digit random number using Scala

Time:08-25

I am new to Scala programming, I want to generate random number with 15 digits, So can you please let share some example. I have tried the below code to get the alpha number string with 10 digits.

  var ranstr = s"${(Random.alphanumeric take 10).mkString}"
  print("ranstr", ranstr)

CodePudding user response:

In scala we have scala.util.Random to get a random value (not only numeric), for a numeric value random have nextInt(n: Int) what return a random num < n. Read more about random

First example:

    val random = new Random()
    val digits = "0123456789".split("")
    var result = ""
    for (_ <- 0 until 15) {
      val randomIndex = random.nextInt(digits.length)
      result  = digits(randomIndex)
    }
    println(result)

Here I create an instance of random and use a number from 0 to 9 to generate a random number of length 15

Second example:

    val result2 = for (_ <- 0 until 15) yield random.nextInt(10)
    println(result2.mkString)

Here I use the yield keyword to get an array of random integers from 0 to 9 and use mkString to combine the array into a string. Read more about yield

CodePudding user response:

There a lot of ways to do this.

The most common way is to use Random.nextInt(10) to generate a digit between 0-9. When building a number of a fixed size of digits, you have to make sure the first digit is never 0.

For that I'll use Random.nextInt(9) 1 which guaranteees generating a number between 1-9 and a sequence with the other 14 generated digits, and a foldleft operation with the first digit as accumulator to generate the number:

  val number =
    Range(1, 15).map(_ => Random.nextInt(10)).foldLeft[Long](Random.nextInt(9)   1) {
      (acc, cur_digit) => acc * 10   cur_digit
    }

Normally for such big numbers it's better to represent them as sequence of characters instead of numbers because numbers can easily overflow. But since a 15 digit number fits in a Long and you asked for a number, I used one instead.

  • Related