bchavez/Bogus · error · ArgumentOutOfRangeException
Gender not handled.
Error message
Gender not handled.
What it means
ExtensionsForSweden.GetGenderNumber only handles Gender.Male and Gender.Female; any other value throws ArgumentOutOfRangeException. The Name.Gender enum defines only those two members, so under normal strongly-typed use this guard is unreachable - it is a defensive fallback for an enum value supplied via an invalid cast.
Source
Thrown at Source/Bogus/Extensions/Sweden/ExtensionsForSweden.cs:96
return individualNumber;
}
private static string GenerateIndividualNumber(Randomizer r, Gender gender, DateTime dateOfBirth, int dayOffset = 0)
{
var genderNumber = GetGenderNumber(r, gender);
var offsetDay = dateOfBirth.Day + dayOffset;
var p = dateOfBirth.ToString("yyyyMM") + offsetDay.ToString("00") + dateOfBirth.ToString("ff") + genderNumber;
var checksum = GetLuhn(p.Substring(2));
return p + checksum;
}
private static int GetGenderNumber(Randomizer r, Gender gender)
{
if( gender is Gender.Male )
return r.Odd(1, 9);
if( gender is Gender.Female )
return r.Even(1, 9);
throw new ArgumentOutOfRangeException(nameof(gender), gender, "Gender not handled.");
}
private static int GetLuhn(string value)
{
// Luhn algorithm doubles every other number in the value.
// To get the correct checksum digit we aught to append a 0 on the sequence.
// If the result becomes a two digit number, subtract 9 from the value.
// If the total sum is not a 0, the last checksum value should be subtracted from 10.
// The resulting value is the check value that we use as control number.
// The value passed is a string, so we aught to get the actual integer value from each char (i.e., subtract '0' which is 48).
var t = value.ToCharArray().Select(d => d - 48).ToArray();
var sum = 0;
int temp;
for (var i = 0; i < t.Length; i++)
{
temp = t[i];
temp *= 2 - (i % 2);View on GitHub (pinned to 6ece18c5c2)
Solutions
- Only use Name.Gender.Male or Name.Gender.Female.
- If gender comes from an int, validate Enum.IsDefined(typeof(Name.Gender), value) before assigning Person.Gender.
- Let Bogus assign gender by default rather than overriding it.
Example fix
// before
person.Gender = (Name.Gender)5;
var pn = person.Personnummer();
// after
person.Gender = Enum.IsDefined(typeof(Name.Gender), incoming)
? (Name.Gender)incoming
: Name.Gender.Male;
var pn = person.Personnummer(); Defensive patterns
Strategy: validation
Validate before calling
if (!Enum.IsDefined(typeof(Name.Gender), person.Gender))
throw new ArgumentOutOfRangeException(nameof(person.Gender));
var pn = person.Personnummer(); Type guard
static bool IsValid(Name.Gender g) => g == Name.Gender.Male || g == Name.Gender.Female;
Prevention
- Only assign Name.Gender.Male or Name.Gender.Female.
- Validate Enum.IsDefined before casting an int to Name.Gender.
- Let Bogus pick gender by default instead of overriding it.
When it happens
Trigger: Calling person.Personnummer() or person.Samordningsnummer() on a Person whose Gender was set to a value produced by casting an out-of-range int to Name.Gender.
Common situations: Deserializing a numeric gender from config/API and casting it to Name.Gender without validation; values other than 0 (Male) and 1 (Female) reach this guard.
Related errors
- Invalid country code
- The locale '{locale}' does not exist. To see all available l
- The country code must be an ISO3166 two-letter country code.
- {nameof(year)} must be between 1858 and 2057.
- {nameof(year)} must be between 1854 and 2039.
AI-assisted analysis of bchavez/Bogus@6ece18c5c2 (2026-08-13).
Data as JSON: /api/errors/eaddca04cddda759.
Report an issue: GitHub.