最近、私はドイツで発行された社会保険番号を確認するためのコードを書いています。
私は3つの出力を持っています:姓、dobと指定された社会保険番号。 3桁目と8桁目の間には、日付月と出生の最後の2年間が含まれます。 ただし、場合によっては偽陰性を返します。誰もが改善を提案することはできますか?私はVBAや一般的なコーディングにはとても新しいので、何か改善があるかどうかは自由にチェックし、提案してください。
私は自分のコードを投稿します。本当のポジティブな例と偽のネガティブな例を投稿します。VBAに関する私の機能は、いくつかの偽陰性を出力します
Akyol 1993年10月31日13311093A017__
Voormann 1995年11月22日53221195V018__
ケーラー1997年10月15日14151097K056__
Xheladini 1991年10月22日65221091X509__
__Steinbach 1991年1月12日12011291S533
偽陰性結果
Visual Basicでの関数
Public Function firstDigitsSocIn(surname As String, dob As Date, socialSecurityNumber As String) As String
'defining variables (add gender after surname when data is available)
Dim dayOfMonth As Integer
Dim monthSoc As Integer
Dim yearSoc As Integer
Dim firstCharSurname As String
Dim customMadeNumber As String
'Dim genderCode As Integer enable when having genders in data set
'Dim genderCheck As Boolean
Dim resultFirst7Chars As Boolean
Dim resultInclGenderCheck As Boolean
Dim resultFinal As Boolean
'setting up variables with correct values
dayOfMonth = Day(dob)
monthSoc = Month(dob)
yearSoc = Right(Year(dob), 2)
firstCharSurname = Left(surname, 1)
'genderCode = Left(Right(socialSecurityNumber, 3), 2)
'if gender = "M" am
'custommadenumber is composed using the credentials of the user
customMadeNumber = dayOfMonth & monthSoc & yearSoc & firstCharSurname
resultFirst7Chars = StrComp(Mid(socialSecurityNumber, 3, 7), customMadeNumber, vbBinaryCompare)
'If gender = "M" And genderCode < 50 Then
'genderCheck = True
'ElseIf gender = "F" And genderCode > 50 Then
'genderCheck = True
'Else
'genderCheck = False
'End If
'resultInclGenderCheck = resultFirst7Chars And genderCheck
'resultFinal = resultInclGenderCheck And True 'put Pruefziffer check here as well
firstDigitsSocIn = resultFirst7Chars
End Function
'='の代わりに 'StrComp'を使う理由はありますか? (私はあなたが 'True' /' False'値だけを望んでいると思います)。すべての例について関数が真を返すようにしたいと思います。(StrComp(Str1、Str2、vbTextCompare)= 0) ' – arcadeprecinct
@arcadeprecinct、正確な一致を確認するために' StrComp 'を使用したかったのですが、構造体に従うのを忘れていました。 –