{"record":{"id":"d75c99d1cd9ee408","repo":"bchavez/Bogus","slug":"pesel-for-year-above-2300-is-invalid","errorCode":null,"errorMessage":"PESEL for year above 2300 is invalid.","messagePattern":"PESEL for year above 2300 is invalid\\.","errorType":"exception","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"Source/Bogus/Extensions/Poland/ExtensionsForPoland.cs","lineNumber":48,"sourceCode":"         .Append(person.Random.Number(9))\n         .Append(person.Random.Number(9))\n         .Append(person.Random.Number(9))\n         .AppendPeselGender(person)\n         .AppendPeselChecksum()\n         .ToString();\n   }\n\n   private static StringBuilder AppendPeselDateOfBirth(this StringBuilder builder, DateTime dateOfBirth)\n   {\n      int monthShift = dateOfBirth.Year switch\n      {\n         < 1800 => throw new ArgumentOutOfRangeException(\"PESEL for the year below 1800 is invalid.\"),\n         < 1900 => 80,\n         < 2000 => 0,\n         < 2100 => 20,\n         < 2200 => 40,\n         < 2300 => 60,\n         _ => throw new ArgumentOutOfRangeException(\"PESEL for year above 2300 is invalid.\"),\n      };\n\n      return builder\n         .Append((dateOfBirth.Year % 100).ToString(\"00\"))\n         .Append((dateOfBirth.Month+monthShift).ToString(\"00\"))\n         .Append(dateOfBirth.Day.ToString(\"00\"));\n   }\n\n   private static StringBuilder AppendPeselGender(this StringBuilder builder, Person person)\n   {\n      return builder\n         .Append(person.Gender == Name.Gender.Male\n            ? person.Random.Odd(0, 9)\n            : person.Random.Even(0, 9));\n   }\n\n   private static StringBuilder AppendPeselChecksum(this StringBuilder builder)\n   {","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/bchavez/Bogus/blob/6ece18c5c22648ab4606e45a0aaf2f07fc5259e4/Source/Bogus/Extensions/Poland/ExtensionsForPoland.cs#L30-L66","documentation":"The PESEL month-shift switch only defines buckets up to year 2299; a year of 2300 or above throws ArgumentOutOfRangeException. The Pesel XML doc confirms the supported range is 1800-2300.","triggerScenarios":"Calling person.Pesel() on a Person whose DateOfBirth.Year is 2300 or greater.","commonSituations":"Future-dated fixture data (e.g. a 2400 birth date) or an off-by error producing a far-future year.","solutions":["Keep Person.DateOfBirth.Year below 2300 when calling Pesel.","Use realistic recent birth-date ranges for fixtures.","Validate the year is within 1800-2299 before generation."],"exampleFix":"// before\nperson.DateOfBirth = new DateTime(2400, 1, 1);\nvar pesel = person.Pesel();\n\n// after\nperson.DateOfBirth = f.Date.Between(new DateTime(1980,1,1), DateTime.Today);\nvar pesel = person.Pesel();","handlingStrategy":"validation","validationCode":"int year = person.DateOfBirth.Year;\nif (year >= 2300)\n    throw new ArgumentOutOfRangeException(nameof(year), \"PESEL requires year < 2300.\");\nvar pesel = person.Pesel();","typeGuard":"static bool PeselYearOk(int y) => y >= 1800 && y < 2300;","tryCatchPattern":null,"preventionTips":["Avoid far-future birth dates when generating PESEL.","Clamp future-oriented date inputs to under 2300.","Treat 1800-2299 as the full PESEL window."],"tags":["poland","pesel","date-validation","national-id"],"backgroundTag":null,"analyzedSha":"6ece18c5c22648ab4606e45a0aaf2f07fc5259e4","analyzedAt":"2026-08-13T21:08:15.463Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}