Skip to content

Instantly share code, notes, and snippets.

@Wind010
Created September 24, 2020 03:03
Show Gist options
  • Select an option

  • Save Wind010/2feef633be98f520bad2f6b778f57701 to your computer and use it in GitHub Desktop.

Select an option

Save Wind010/2feef633be98f520bad2f6b778f57701 to your computer and use it in GitHub Desktop.
Credit card utilities
Enum PaymentTypes
{
Visa
MasterCard
AmericanExpress
Discover
JapanCreditBureau
DinersClub
}
<#
.SYNOPSIS
Get the credit card type based off the card number.
.PARAMETER creditCardNumber
The card number youw want to get type for.
.EXAMPLE
Get-CreditCardType -creditCardNumber "4444333322221111"
#>
function Get-CreditCardType
{
param (
[Parameter(Mandatory=$True)]
[string] $creditCardNumber
)
[string] $visaRegExPattern = "4[0-9]{12}(?:[0-9]{3})"
[string] $masterCardRegExPattern = "(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}"
[string] $americanExpressRegExPattern = "3[47][0-9]{13,14}"
[string] $discoverRegExPattern = "6(?:011|5[0-9]{2})[0-9]{12}"
[string] $jcbRegExPattern = "(?:2131|1800|35\d{3})\d{11}"
[string] $dinersClubRegExPattern = "3(?:0[0-5]|[68][0-9])[0-9]{11}"
switch -regex ($creditCardNumber)
{
$visaRegExPattern
{
return [PaymentTypes]::Visa
}
$masterCardRegExPattern
{
return [PaymentTypes]::MasterCard
}
$americanExpressRegExPattern
{
return [PaymentTypes]::AmericanExpress
}
$discoverRegExPattern
{
return [PaymentTypes]::Discover
}
$jcbRegExPattern
{
return [PaymentTypes]::JapanCreditBureau
}
$dinersClubRegExPattern
{
return [PaymentTypes]::DinersClub
}
}
throw "Could not determine credit card type."
}
<#
.SYNOPSIS
Checks whether a given number was generated using the Luhn algorithm.
.PARAMETER creditCardNumber
The card number you want to validate.
.EXAMPLE
Test-ValidLuhn -creditCardNumber "4444333322221111"
#>
function Test-ValidLuhn {
param (
[Parameter(Mandatory=$True)]
[string]$creditCardNumber
)
[char[]] $temp = $creditCardNumber.ToCharArray();
[int[]] $numbers = @(0) * $creditCardNumber.Length;
[bool] $alt = $false;
[int] $sum = 0
for($i = $temp.Length -1; $i -ge 0; $i--)
{
$numbers[$i] = [int]::Parse($temp[$i])
if($alt)
{
$numbers[$i] *= 2
if($numbers[$i] -gt 9)
{
$numbers[$i] -= 9
}
}
$sum += $numbers[$i]
$alt = !$alt
}
return ($sum % 10) -eq 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment