Ben Blackmore
Ben Blackmore

Reputation: 45

Check String for identical Digits

I'm asking my users to enter a 4 - 6 digit numberic PIN. And I'd like to make sure users can't enter 0000 or 11111 or 333333. How can I check a string for 4 consecutive identical digits? I'm using vb.net.

Upvotes: 0

Views: 594

Answers (2)

Chris Dunaway
Chris Dunaway

Reputation: 11216

This answer is similar to the accepted answer, but does not create lots of temporary strings in memory.

'maxnumber = maximum number of identical consecutive characters in a string
Public Function HasConsecutiveChars(ByVal j As String, ByVal maxNumber As Integer) As Boolean

    Dim result As Boolean = False
    Dim consecutiveChars As Integer = 1
    Dim prevChar As Char = "x"c

    For Each c in j
        If c = prevChar Then
            consecutiveChars += 1
            If consecutiveChars >= maxNumber Then
                result = True
                Exit For
            End If
        Else
            consecutiveChars = 1
        End If

        prevChar = c
    Next

    Return result

End Function

Upvotes: 0

User999999
User999999

Reputation: 2520

See code snippet below:

Sub Main()
    Dim a As String = "001111"
    Dim b As String = "1123134"
    Dim c As String = "1111"

    Console.WriteLine(CheckConsecutiveChars(a, 4)) 'True => Invalid Pin
    Console.WriteLine(CheckConsecutiveChars(b, 4)) 'False => Valid Pin
    Console.WriteLine(CheckConsecutiveChars(c, 4)) 'True => Invalid Pin
    Console.ReadLine()
End Sub


'maxnumber = maximum number of identical consecutive characters in a string
Public Function CheckConsecutiveChars(ByVal j As String, ByVal maxNumber As Integer) As Boolean

    Dim index As Integer = 0
    While ((index + maxNumber) <= j.Length)
        If (j.Substring(index, maxNumber).Distinct.Count = 1) Then
            Return True
        End If
        index = index + 1
    End While
    Return False

End Function

The method String.Distinct.Count() counts the number of distinct characters in a string. You cast your digit to a String and test for the number of different characters. If the result is 1 then the user has entered the same number.

Note: If you're using the Substring, you must check the length of the string first (is it long enough) to avoid exceptions.

Upvotes: 1

Related Questions