internal/functions/generators/New-SldgIdentifier.ps1
|
function New-SldgIdentifier { <# .SYNOPSIS Generates various types of identifiers: GUIDs, business numbers, SSNs, IBANs, etc. #> [CmdletBinding()] param ( [ValidateSet('Guid', 'BusinessNumber', 'SSN', 'NationalId', 'TaxId', 'IBAN', 'CreditCard', 'BankAccount', 'LicenseNumber', 'PassportNumber', 'Code', 'Username')] [string]$Type = 'Guid', [string]$Prefix = '', [string]$Locale, [int]$Count = 1 ) for ($i = 0; $i -lt $Count; $i++) { switch ($Type) { 'Guid' { [guid]::NewGuid().ToString() } 'BusinessNumber' { $prefixStr = if ($Prefix) { $Prefix } else { @('INV', 'ORD', 'PO', 'SO', 'RFQ', 'WO', 'TKT') | Get-Random } $num = Get-Random -Minimum 100000 -Maximum 999999 "$prefixStr-$num" } 'SSN' { # Generate fake SSN format (not real SSNs - area 900+ is reserved/invalid) $area = Get-Random -Minimum 900 -Maximum 999 $group = Get-Random -Minimum 10 -Maximum 99 $serial = Get-Random -Minimum 1000 -Maximum 9999 "$area-$group-$serial" } 'NationalId' { $part1 = Get-Random -Minimum 100000 -Maximum 999999 $part2 = Get-Random -Minimum 1000 -Maximum 9999 "$part1/$part2" } 'TaxId' { $part1 = Get-Random -Minimum 10 -Maximum 99 $part2 = Get-Random -Minimum 1000000 -Maximum 9999999 "$part1-$part2" } 'IBAN' { # Fake IBAN-like format using locale IBAN countries $localeData = Get-SldgLocaleData -Locale $Locale $ibanCountries = if ($localeData.IBANCountries) { $localeData.IBANCountries + @('DE', 'FR', 'GB', 'AT', 'NL') } else { @('DE', 'FR', 'GB', 'CZ', 'AT', 'NL', 'BE', 'ES', 'IT', 'PL') } $countryCode = $ibanCountries | Get-Random $check = Get-Random -Minimum 10 -Maximum 99 $bban = -join (1..16 | ForEach-Object { Get-Random -Minimum 0 -Maximum 10 }) "$countryCode$check$bban" } 'CreditCard' { # Fake credit card (starts with test prefix 9999) $ccPrefix = '9999' $middle = -join (1..8 | ForEach-Object { Get-Random -Minimum 0 -Maximum 10 }) $last = -join (1..4 | ForEach-Object { Get-Random -Minimum 0 -Maximum 10 }) "$ccPrefix-$middle-$last" } 'BankAccount' { $routing = Get-Random -Minimum 100000000 -Maximum 999999999 $account = Get-Random -Minimum 10000000 -Maximum 99999999 "$routing-$account" } 'LicenseNumber' { $letter = [char](Get-Random -Minimum 65 -Maximum 91) $num = Get-Random -Minimum 1000000 -Maximum 9999999 "$letter$num" } 'PassportNumber' { $letters = -join (1..2 | ForEach-Object { [char](Get-Random -Minimum 65 -Maximum 91) }) $num = Get-Random -Minimum 100000 -Maximum 999999 "$letters$num" } 'Code' { if ($Prefix) { $num = Get-Random -Minimum 1000 -Maximum 9999 "$Prefix$num" } else { $letters = -join (1..3 | ForEach-Object { [char](Get-Random -Minimum 65 -Maximum 91) }) $num = Get-Random -Minimum 100 -Maximum 999 "$letters$num" } } 'Username' { $first = (New-SldgPersonName -Type First -Locale $Locale).ToLower() $last = (New-SldgPersonName -Type Last -Locale $Locale).ToLower() $num = Get-Random -Minimum 1 -Maximum 99 $pattern = Get-Random -Minimum 0 -Maximum 3 switch ($pattern) { 0 { "$first.$last" } 1 { "$($first[0])$last$num" } 2 { "$first$num" } } } } } } |