Thanks for the feedback. I had read that MD5 collisions were becoming more common, but hadn't realized that NIST had declared it unsecure. SHA-256 and SHA-512 are good alternatives for now.
The .NET code for validation can be as simple as a FOR...NEXT loop comparing your string character by character, a Regular Expression or it can take advantage of the ASP Validators. Here's a very simple example of a FOR...NEXT loop to validate a username consists of only the characters "A" - "Z" and "a" - "z", as I alluded to:
Function ValidUser(s As String) As Boolean
Dim f As Boolean = True
s = s.ToUpper()
For i = 0 To s.Length - 1
If (s.Substring(i, 1) < "A" OrElse s.Substring(i, 1) > "Z") Then
f = False
EndIf
Next
End Function
.NET has several built-in validators that can be used also to validate input to various degrees; I assume you're talking about the RequiredFieldValidator in your post. To use, just drag the RequiredFieldValidator onto the form next to the Password text box, and change the properties as follows:
1. Set .ControlToValidate to Password.
2. Set the .Text property to a descriptive message, such as "Password Required".
T-SQL validation could also be performed using a loop, as alluded to. Here's a UDF that can be called from within a SQL SP:
CREATE FUNCTION dbo.udf_ValidUserName(@s VARCHAR(255))
RETURNS CHAR(1)
AS
BEGIN
DECLARE @i INTEGER
SET @i = 1
DECLARE @result CHAR(1)
SET @result = 'T'
SET @s-2 = UPPER(@s)
WHILE @i <= LEN(@s)
BEGIN
IF (SUBSTRING(@s, @i, 1) < 'A' OR
SUBSTRING(@s, @i, 1) > 'Z')
BEGIN
SET @result = 'F'
END
SET @i = @i + 1
END
RETURN @result
END
Thanks!