Chance.js port into native C# targetting .NET Standard.
This project aims to mimic the original chance.js api as closely as possible while adapting it to C# types and practices. For example using enums for options and returning regular objects instead of json or strings.
Install from NuGet
Simply instantiate a new generator with a new time-dependant seed.
Chance chance = new Chance();
Or provide a seed.
Chance chance = new Chance(42);
Which can also be a string.
Chance chance = new Chance("string seed");
Due to entropy limitations in the underlying System.Random
, new generators that are instantiated
during the same tick
will inherit the same seed from the system clock. For this reason, when creating multiple Chance
instances together, it is recommended that you use a single instance as a generator.
Chance generator = new Chance();
for (...)
{
Chance chance = generator.New();
}
The default Chance
instance relies on the underlying System.Radom
which is not thread-safe by default.
To share the same generator between multiple threads use the ConcurrentChance
class instead.
Chance chance = new ConcurrentChance(seed);
Almost every function that is implemented in Chance.js. Apart from those, you will find new additions listed below.
Location loc = chance.Location();
You can also generate random locations that are within a given range in meters from a central location. The generated point is also mathematically set to be uniformally distributed in the given area.
double centerLatitude = 55.753765;
double centerLongitude = 37.620641;
double range = 100;
// This point will be somewhere around the Red Square in Moscow
Location point = chance.Location(centerLatitude, centerLongitude, range);
CreditCardType ccType = chance.CreditCardType();
ccType.Type; // MasterCard
ccType.Prefix; // "51"
ccType.SpacingPattern; // "4-4-4-4"
CreditCard cc = chance.CreditCard();
cc.Number; // "4246023948634476"
cc.NumberFormatted; // "4246 0239 4863 4476"
cc.ExpirationMonth; // June
cc.ExpirationYear; // 2020
cc.ExpirationString; // 06/20
Person p = chance.Person(gender: Gender.Male);
p.Gender; // Male
p.FirstName; // John
p.SSN; // "501940398"
You can generate objects of your own types by setting the appropriate attributes and using
the Chance.Object<T>()
method.
public class Book
{
[Year]
public int PublishingYear;
[Person]
public Person Author;
[String(10)]
public string Title;
[Paragraph(sentences: 6)]
public string Summary;
}
Book book = chance.Object<Book>();
- Original idea, concept and some of the original datasets are credited to Victor Quinn and the rest of the contributors of Chance.js.
- Math contributions from Markos Karameris.