首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >密码的字符串操作

密码的字符串操作
EN

Stack Overflow用户
提问于 2018-11-15 16:04:37
回答 3查看 38关注 0票数 0

日安,

我正在尝试创建用户启动日期的默认密码库。例如,如果用户启动"11/10/2018",密码应该是"Sep10th2018!“

这就是我所拥有的。它“有效”,但我相信应该有更好的方法来做到这一点。我只是不知道怎么做。以防万一,这不是什么问题。更多的是为了学习。我想在PowerShell做得更好。

代码语言:javascript
复制
#   Generate Default Password
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "1") {
    $Month = "Jan"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "2") {
    $Month = "Feb"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "3") {
    $Month = "Mar"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "4") {
    $Month = "Apr"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "5") {
    $Month = "May"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "6") {
    $Month = "Jun"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "7") {
    $Month = "Jul"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "8") {
    $Month = "Aug"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "0" -and $StartDate[1] -eq "9") {
    $Month = "Sep"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "1" -and $StartDate[1] -eq "0") {
    $Month = "Oct"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}    
IF ($StartDate[0] -eq "1" -and $StartDate[1] -eq "1") {
    $Month = "Nov"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}   
IF ($StartDate[0] -eq "1" -and $StartDate[1] -eq "2") {
    $Month = "Dec"
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "1") {$Day = "1st"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "2") {$Day = "2nd"}
    IF ($StartDate[3] -eq "0" -eq $StartDate[4] -eq "3") {$Day = "3rd"} 
    Else {$Day = @($StartDate[3] + $StartDate[4] + "th")}
    $Year = @("20" + $StartDate[8] + $StartDate[9] + "!")
}

[string]$password2 = @($Month + $Day + $Year)
$password = $password2 | ConvertTo-SecureString -AsPlainText -Force
$password 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-15 16:42:21

使用regex获取日期后缀,使用格式运算符构建密码:

代码语言:javascript
复制
function Get-DateSuffix([datetime]$Date) {
    switch -regex ($Date.Day.ToString()) {
        '1(1|2|3)$' { 'th'; break }
        '.?1$'      { 'st'}
        '.?2$'      { 'nd'}
        '.?3$'      { 'rd'}
        default     { 'th'}
    }
}

[datetime]$StartDate = "11/10/2018"

$password = "{0:MMM}{1}{2}{3}!" -f $StartDate, $StartDate.Day, (Get-DateSuffix $StartDate), $StartDate.Year
票数 1
EN

Stack Overflow用户

发布于 2018-11-15 16:28:45

重新使用优雅的C#解决方案这里,您可以在PowerShell中这样做:

代码语言:javascript
复制
    function Get-DaySuffix($day)
    {
        switch ($day)
        {
            {$day -in (1,21,31)} {"st" }
            {$day -in (2,22)} { "nd" }
            {$day -in (3,23)} { "rd" }
            default { "th" }
        }
    }

    # Change to some other means of getting date - e.g. Read-Host
    $startDate = Get-Date "23/05/2007"

    # Get a collection of the month names (e.g. Jan, Feb, mar, etc)
    $months = [System.Globalization.CultureInfo]::CurrentCulture.DateTimeFormat.AbbreviatedMonthNames

    # Build the password from the date parts
    $password = "$($months[$startDate.Month-1])$($startDate.Day)$(Get-DaySuffix $startDate.Day)$($startDate.Year)!"

在本例中,$password设置为May23rd2007!

票数 2
EN

Stack Overflow用户

发布于 2018-11-15 16:34:35

免责声明:您可能已经知道了,但是我必须声明这是一个非常糟糕的密码,如果您可以这样称呼的话

大部分内容都可以卸载到类型中,除了月份的序号后缀。

我会把它分解成三个步骤:

  1. 解析输入日期
  2. 生成前半部分
  3. 计算后缀
  4. 附加年份
代码语言:javascript
复制
# Parse the input date
$inputDate = Read-Host "Input date in the format MM/dd/yyyy"
$date = [datetime]::ParseExact($inputDate,'MM/dd/yyyy',$null)

# Generate first half 
$dateString = $date.ToString('MMMdd')

# Calculate the ordinal suffix
$day = $date.Day
if($day -in 1,21,31) {
    $dateString += 'st'
}
else if($day -in 2,22) {
    $dateString += 'nd'
}
else if($day -in 3,23) {
    $dateString += 'rd'
}
else {
    $dateString += 'th'
}

# Append the year:
$dateString += $date.ToString('yyyy!')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53323403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档