using System.Text.RegularExpressions;
public static void Main()
Console.WriteLine(GenSSN(new DateTime(2010, 2, 1)));
public static string GenSSN(DateTime yyyy)
var rex = new Regex(@"^(?<birthdate>(?<day>dd)(?<month>dd)(?<year>dd))(?<individual>dd(?<gender>d))(?<checksum>dd)$");
string formatOut = "ddMMyy";
var date = yyyy.ToString(formatOut);
int d1 = Convert.ToInt32(date.Substring(0, 1));
int d2 = Convert.ToInt32(date.Substring(1, 1));
int m1 = Convert.ToInt32(date.Substring(2, 1));
int m2 = Convert.ToInt32(date.Substring(3, 1));
int y1 = Convert.ToInt32(date.Substring(4, 1));
int y2 = Convert.ToInt32(date.Substring(5, 1));
int c1 = 0, c2 = 0, i1 = 0, i2 = 0, i3 = 0;
var num = yyyy.Year < 2000 ? r.Next(0, 499) : r.Next(500, 900);
int[] n = num.ToString().ToCharArray().Select(c => Convert.ToInt32(c.ToString())).ToArray();
i1 = n[0]; i2 = n[1]; i3 = n[2];
var v1 = (3 * d1) + (7 * d2) + (6 * m1) + m2 + (8 * y1) + (9 * y2) + (4 * i1) + (5 * i2) + (2 * i3);
c1 = (v1 % 11) == 0 ? 0 : 11 - (v1 % 11);
int v2 = (5 * d1) + (4 * d2) + (3 * m1) + (2 * m2) + (7 * y1) + (6 * y2) + (5 * i1) + (4 * i2) + (3 * i3) + (2 * c1);
c2 = (v2 % 11) == 0 ? 0 : 11 - (v2 % 11);
if ((c1 < 10) && (c2 < 10))
var ssn = String.Concat(d1, d2, m1, m2, y1, y2, i1, i2, i3, c1, c2);