190 lines
6.7 KiB
PowerShell
190 lines
6.7 KiB
PowerShell
# _..._ .-'''-. .-'''-.
|
|
# .-'_..._''. ' _ \ .---. ' _ \
|
|
# /| .' .' '.\/ /` '. \ | |.--. / /` '. \
|
|
# || .-. .- / .' . | \ ' | ||__|. | \ '
|
|
# || \ \ / / .-,.--. . ' | ' | '| |.--.| ' | '
|
|
# || __ \ \ / / __ | .-. || | \ \ / / | || |\ \ / /
|
|
# ||/'__ '.\ \ / / .--------. .:--.'. | | | || | `. ` ..' / | || | `. ` ..' /
|
|
# |:/` '. '\ \ / / |____ | / | \ | | | | '- \ '. . | || |
|
|
# || | | \ ` / / / `" __ | | | | '. `._____.-'/ | ||__|
|
|
# ||\ / ' \ / .' / .'.''| | | | `
|
|
# |/\'..' / / / / /___ / / | |_| | `
|
|
# ' `'-'`|`-' / | |\ \._,\ '/|_| `
|
|
# '..' |_________| `--' `"
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Generates dates and various types of PINs based on the provided input date.
|
|
|
|
.DESCRIPTION
|
|
This script generates dates and various types of PINs based on the provided input date. The output can be saved to a specified file.
|
|
The script allows for flexible configuration of the output order of generated items.
|
|
|
|
.PARAMETER inputDate
|
|
Specifies the input date in one of the following formats: "dd-MM-yyyy", "MM-yyyy", or "yyyy".
|
|
|
|
.PARAMETER OutputFile
|
|
Specifies the path to the output file where the generated data will be saved.
|
|
|
|
.PARAMETER outputOrder
|
|
Specifies the order in which the generated items will be outputted. The default order is:
|
|
"GenerateDates_ddMMyy_MMyyyy_yyyyMM", "GenerateRepetitiveNumberPINs", "GenerateSequentialNumberPINs",
|
|
"GenerateNumericPalindromes", "GenerateTwoUniqueNumberPINs", "GenerateRepeatedPairsAndTriosPINs",
|
|
"GenerateDates_other".
|
|
|
|
.EXAMPLE
|
|
.\GenerateData.ps1 -inputDate "01-01-2023" -OutputFile "C:\output.txt" -outputOrder "GenerateDates_ddMMyy_MMyyyy_yyyyMM"
|
|
|
|
Generates dates in the format ddMMyy, MMyyyy, and yyyyMM starting from 01-01-2023 and saves them to C:\output.txt.
|
|
|
|
.EXAMPLE
|
|
.\GenerateData.ps1 -inputDate "2023" -OutputFile "C:\output.txt" -outputOrder "GenerateRepetitiveNumberPINs", "GenerateSequentialNumberPINs"
|
|
|
|
Generates repetitive number PINs and sequential number PINs starting from the year 2023 and saves them to C:\output.txt.
|
|
|
|
.INPUTS
|
|
None
|
|
|
|
.OUTPUTS
|
|
None
|
|
|
|
.NOTES
|
|
#>
|
|
|
|
param (
|
|
[Parameter(Mandatory=$true, HelpMessage="Input date in the format 'dd-MM-yyyy', 'MM-yyyy', or 'yyyy'.")]
|
|
[string]$inputDate,
|
|
|
|
[Parameter(Mandatory=$true, HelpMessage="Output file path.")]
|
|
[string]$OutputFile,
|
|
|
|
[Parameter(HelpMessage="Specifies the order in which the generated items will be outputted.")]
|
|
[string[]]$outputOrder = @("GenerateDates_ddMMyy_MMyyyy_yyyyMM", "GenerateRepetitiveNumberPINs",
|
|
"GenerateSequentialNumberPINs", "GenerateNumericPalindromes",
|
|
"GenerateTwoUniqueNumberPINs", "GenerateRepeatedPairsAndTriosPINs",
|
|
"GenerateDates_other")
|
|
)
|
|
|
|
$uniquePINs = @{}
|
|
$orderedPINs = New-Object System.Collections.ArrayList
|
|
|
|
function AddToUniquePINs($pin) {
|
|
if (-not $uniquePINs.ContainsKey($pin)) {
|
|
$uniquePINs[$pin] = $true
|
|
$orderedPINs.Add($pin) | Out-Null
|
|
}
|
|
}
|
|
|
|
function GenerateDates_ddMMyy_MMyyyy_yyyyMM($startDate) {
|
|
$endDate = (Get-Date)
|
|
$formats = @("ddMMyy", "MMyyyy", "yyyyMM")
|
|
|
|
foreach ($format in $formats) {
|
|
$currentDate = $startDate
|
|
while ($currentDate -le $endDate) {
|
|
$dateStr = $currentDate.ToString($format)
|
|
AddToUniquePINs $dateStr
|
|
$currentDate = $currentDate.AddDays(1)
|
|
}
|
|
}
|
|
}
|
|
|
|
function GenerateDates_other($startDate) {
|
|
$endDate = (Get-Date)
|
|
$formats = @("MMddyy", "yyMMdd")
|
|
|
|
foreach ($format in $formats) {
|
|
$currentDate = $startDate
|
|
while ($currentDate -le $endDate) {
|
|
$dateStr = $currentDate.ToString($format)
|
|
AddToUniquePINs $dateStr
|
|
$currentDate = $currentDate.AddDays(1)
|
|
}
|
|
}
|
|
}
|
|
|
|
function GenerateNumericPalindromes {
|
|
for ($i = 0; $i -le 999; $i++) {
|
|
$formattedNum = "{0:D3}" -f $i
|
|
$palindrome = $formattedNum + [string]($formattedNum[2]) + [string]($formattedNum[1]) + [string]($formattedNum[0])
|
|
AddToUniquePINs $palindrome
|
|
}
|
|
}
|
|
|
|
function GenerateRepetitiveNumberPINs {
|
|
for ($i = 0; $i -lt 10; $i++) {
|
|
$pin = ($i.ToString() * 6)
|
|
AddToUniquePINs $pin
|
|
}
|
|
}
|
|
|
|
function GenerateSequentialNumberPINs {
|
|
for ($i = 0; $i -le 4; $i++) {
|
|
$pin = $i..($i+5) -join ''
|
|
AddToUniquePINs $pin
|
|
}
|
|
|
|
for ($i = 9; $i -ge 5; $i--) {
|
|
$pin = $i..($i-5) -join ''
|
|
AddToUniquePINs $pin
|
|
}
|
|
}
|
|
|
|
function GenerateRepeatedPairsAndTriosPINs {
|
|
for ($i = 0; $i -lt 100; $i++) {
|
|
$formattedPair = "{0:D2}" -f $i
|
|
$pairPin = ($formattedPair * 3)
|
|
AddToUniquePINs $pairPin
|
|
}
|
|
|
|
for ($i = 0; $i -lt 1000; $i++) {
|
|
$formattedTrio = "{0:D3}" -f $i
|
|
$trioPin = ($formattedTrio * 2)
|
|
AddToUniquePINs $trioPin
|
|
}
|
|
}
|
|
|
|
function GenerateTwoUniqueNumberPINs {
|
|
for ($i = 0; $i -le 9; $i++) {
|
|
for ($j = 0; $j -le 9; $j++) {
|
|
if ($i -ne $j) {
|
|
for ($k = 1; $k -le 5; $k++) {
|
|
$pin = ($i.ToString() * $k) + ($j.ToString() * (6 - $k))
|
|
AddToUniquePINs $pin
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$datePattern = '^\d{2}-\d{2}-\d{4}$'
|
|
$monthYearPattern = '^\d{2}-\d{4}$'
|
|
$yearPattern = '^\d{4}$'
|
|
|
|
$isValidInput = $false
|
|
$startDate = $null
|
|
|
|
if ($inputDate -match $datePattern) {
|
|
$startDate = [datetime]::ParseExact($inputDate, 'dd-MM-yyyy', $null)
|
|
$isValidInput = $true
|
|
} elseif ($inputDate -match $monthYearPattern) {
|
|
$startDate = [datetime]::ParseExact($inputDate, 'MM-yyyy', $null)
|
|
$isValidInput = $true
|
|
} elseif ($inputDate -match $yearPattern) {
|
|
$startDate = [datetime]::ParseExact($inputDate, 'yyyy', $null)
|
|
$isValidInput = $true
|
|
}
|
|
|
|
if ($isValidInput) {
|
|
foreach ($functionName in $outputOrder) {
|
|
if ($functionName.StartsWith("GenerateDates")) {
|
|
Invoke-Expression "$functionName `$startDate"
|
|
} else {
|
|
Invoke-Expression $functionName
|
|
}
|
|
}
|
|
|
|
# Output all unique entries to the specified file
|
|
$orderedPINs | ForEach-Object { Add-Content -Path $OutputFile -Value $_ }
|
|
}
|