Mar 5, 2018 at 7:29pm UTC
I'm trying to generate random social security numbers from 000 - 00 - 0000 to 999 - 99 - 9999 , so what I did was generate a random number from 0 to 999999999, convert the int to a string, and then add leading zero if it wasn't a 9 digit number, and then added a '-'. However, after I set the width to 9 and added the leading zeros, my program will not generate anything in the first four digits.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
using namespace std;
int rng11(){return 1+(rand()%999999999);}
int main()
{
srand(time(NULL));
string student[100];
for (int i=0; i<100; i++)
{
int z = rng11();
string result;
stringstream convert;
convert << std::setw(9) << setfill('0' ) << z ;
result = convert.str();
result.insert(3,1, '-' );
result.insert(6,1, '-' );
student[i] = result;
cout << student[i] << endl;
}
return 0;
}
Last edited on Mar 5, 2018 at 7:32pm UTC
Mar 5, 2018 at 7:49pm UTC
rand() generates a random number between zero and RAND_MAX.
RAND_MAX could be as low as 32767.
If you never see a number above 000099999 , it suggests your RAND_MAX is less than 100000.
rand() is bad. Don't use rand().
https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful
Here is a better, C++11 random number generator:
https://www.guyrutenberg.com/2014/05/03/c-mt19937-example/
Don't use modulus to trim your random numbers to a range you want. That makes them much, much less random.
Try something like:
mt19937::result_type seed = time(0);
and then to get your numbers:
1 2
auto dice_rand = std::bind(std::uniform_int_distribution<int >(0,999999999),
mt19937(seed));
Last edited on Mar 5, 2018 at 8:07pm UTC