Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 368
  • Last Modified:

Explanation needed for VB code

Hello,

I need some clarification for the following lines of code which check the entered User name and entered password and if valid allow the user to login. The lines of code are numbered so that I can refer to the parts that I don't understand:

1)    Dim users() As String = {"Adam", "Eve", "Angel"}
2)     Dim passwords() As String = {"pass1", "pass2", "pass3"}
3)      For i As Integer = 0 To users.Length - 1
4)     Dim validUsername As Boolean = (String.Compare(UserName.Text, users(i), True) = 0)
5)    Dim validPassword As Boolean = (String.Compare(Password.Text, passwords(i), False) = 0)
6)     If validUsername AndAlso validPassword Then
7)                ' TODO: Log in the user...


The above code works great. But what I don't understand are lines 4 and 5. I do understand what both lines are doing: they are comparing the text in the UserName with that of User(i) and if the outcome of the comparison is true then the user name is verified. The same logic is used in line 5 for the password.

But two things confuse me. The first is the way each line is constructed and second the fact that in line 4 "True" is used while in line 5 "False" is used. Shouldn't both of them be "True"?
Actually when I altered line 5 (from False to True) I got the same result! Why?
I need the clearest explanation and not the quickest. Thank you.
0
adamtrask
Asked:
adamtrask
  • 4
  • 3
1 Solution
 
Carl TawnSystems and Integration DeveloperCommented:
The True/False switch that gets passed to the String.Compare method controls case-sensitivity for the comparison. So, in essence it is doing a case-insensitive comparison of username, but case-sensitive for passwords.

String.Compare will return 0 if the two strings match. You cannot assign 0 directly to a boolean, so those lines wrap the String.Compare(...) = 0 in brackets to create an expression that will return a boolean value.
0
 
adamtraskAuthor Commented:
Carl,

Are you saying that if I wrote Line 4 like this:

4)     Dim validUsername As Boolean = (String.Compare(UserName.Text, users(i),False) = 0)

It would make a case-sensitive comparison?

And if I used True instead of False in line 5 it would make a case-insensitive comparison?
0
 
Carl TawnSystems and Integration DeveloperCommented:
True means ignore case, i.e. case-insensitive. False means make a case-sensitive comparison.

Reference:

     http://msdn.microsoft.com/en-us/library/zkcaxw5y.aspx
0
Free Backup Tool for VMware and Hyper-V

Restore full virtual machine or individual guest files from 19 common file systems directly from the backup file. Schedule VM backups with PowerShell scripts. Set desired time, lean back and let the script to notify you via email upon completion.  

 
adamtraskAuthor Commented:
One last clarification:

In lines 4 and 5, can I skip True and False altogether? and write them in the following way:

4)     Dim validUsername As Boolean = (String.Compare(UserName.Text, users(i)) = 0)
5)    Dim validPassword As Boolean = (String.Compare(Password.Text, passwords(i)) = 0)
0
 
Carl TawnSystems and Integration DeveloperCommented:
You can, but that will always use a case-sensitive comparison.

I think your code is being explicit because usual practice for login credentials is for usernames to be case-insensitive, while passwords are usually case-sensitive.
0
 
adamtraskAuthor Commented:
Thanks you so much.
This cleared a mystery for me.
0
 
adamtraskAuthor Commented:
Great response
0

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now