• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

VBA Burgerservicenummer

Status
Niet open voor verdere reacties.

Esducsafe

Gebruiker
Lid geworden
2 sep 2009
Berichten
185
Het is mij nog steeds niet gelukt om de VBA code te vinden die direct de invoer van BSN nummer controleert. Bijgevoegde code werkt alleen indirect via invoer Userform, invoer BSN enz. Mijn vraag kan de code zo worden aangepast, dat bij invoer BSN nummer (bijvoorbeeld in Cel A1) direct gecontroleerd wordt? De Excel formule is mij bekend (en werkt ook), maar omdat er een MsgBox melding moet verschijnen als het ingevoerde nummer fout is, zoek ik dus bedoelde code. Alvast bedankt.
Met vriendelijke groet,
Esko

Code:
Public Function SofiControle(SofiNummer As Variant) As Boolean
  Dim i As Integer, Som As Integer
  
  If Len(SofiNummer) <> 9 Then Exit Function
  If IsNull(SofiNummer) Then Exit Function
  If VarType(SofiNummer) <> vbString Then SofiNummer = CStr(SofiNummer)
  If Val(Left(SofiNummer, 1)) <> 0 Then SofiNummer = "0" + SofiNummer
  For i = 1 To 8
    Som = Som + Val(Mid(SofiNummer, i, 1)) * (10 - i)
  Next i

  If Val(Right(SofiNummer, 1)) = (Som Mod 11) Then SofiControle = True
End Function

Private Sub CommandButton1_Click()
  If SofiControle(TextBox1.Text) Then
    MsgBox "Sofinummer is OK"
    'doe hier wat je wilt met de uitkomst van textbox1.text
    UserForm1.Hide
  Else
    MsgBox "sofinummer is niet correct"
  End If
End Sub
 
Esducsafe,

Ik heb A1 de naam BSnummer gegeven.
In B1 heb ik dit gezet, =SofiControle(BSnummer), anders doet hij het niet.
Bij mij werkt het.

Code:
Public Function SofiControle(BSNummer As Variant) As Boolean
  Dim i As Integer, Som As Integer
  
  If Len(BSNummer) > 9 Then Exit Function
  If IsNull(BSNummer) Then Exit Function
  If VarType(BSNummer) <> vbString Then BSNummer = CStr(BSNummer)
  If Val(Left(BSNummer, 1)) <> 0 Then BSNummer = "0" + BSNummer
  For i = 1 To 8
    Som = Som + Val(Mid(BSNummer, i, 1)) * (10 - i)
  Next i

  If Val(Right(BSNummer, 1)) = (Som Mod 11) Then 'SofiControle = True
    MsgBox "BSnummer is OK"
     Else
    MsgBox "Burger Service Nummer is niet correct"
End If
End Function
 
Laatst bewerkt:
Esducsafe,

Zet deze code achter het werkblad.
Vul in A1 het BSnummer in en geef enter.
Nu hoef er in B1 niets te staan.

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim i As Integer, Som As Integer
  
  If Len(BSNummer) > 9 Then Exit Sub 'Function
  If IsNull(BSNummer) Then Exit Sub 'Function
  If VarType(BSNummer) <> vbString Then BSNummer = CStr(BSNummer)
  If Val(Left(BSNummer, 1)) <> 0 Then BSNummer = "0" + BSNummer
  For i = 1 To 8
    Som = Som + Val(Mid(BSNummer, i, 1)) * (10 - i)
  Next i

  If Val(Right(BSNummer, 1)) = (Som Mod 11) Then 'SofiControle = True
    MsgBox "BSnummer is OK"
    'doe hier wat je wilt met de uitkomst van textbox1.text
    'UserForm1.Hide
  Else
    MsgBox "Burger Service Nummer is niet correct"
End If
End Sub
 
functie aanpassen

hoi

plak deze functie in een module (zo als je ziet is er niet veel aan veranderd)

en gebruik hem in voorwaardelijke opmaak

Public Function SofiControle_nieuw(SofiNummer As String) As Boolean
Dim i As Integer, Som As Integer

If Len(SofiNummer) <> 9 Then Exit Function
If IsNull(SofiNummer) Then Exit Function
If VarType(SofiNummer) <> vbString Then SofiNummer = CStr(SofiNummer)
If Val(Left(SofiNummer, 1)) <> 0 Then SofiNummer = "0" + SofiNummer
For i = 1 To 8
Som = Som + Val(Mid(SofiNummer, i, 1)) * (10 - i)
Next i

If Val(Right(SofiNummer, 1)) = (Som Mod 11) Then SofiControle_nieuw( = True
End Function

groet sylvester
 
Laatst bewerkt:
of
Code:
Public Function Sofi(SofiNr As String) As Boolean
  For j = 1 To Len(SofiNr) - 1
    c9 = c9 + (10-j) * Mid(SofiNr, j, 1)
  Next
  If j = 9 And Val(Right(SofiNr, 1)) = c9 Mod 11 Then Sofi = True
End Function
 
Ik denk dat je misschien meer heb aan de code van snb.
 
Ik heb voor u de code van snb in een voorbeeldbestand gestopt, zodat je je melding krijgt bij een foutief nummer.

Cobbe
 
Laatst bewerkt:
...als je de 11-proof voor sofi-nummers écht wilt maken, is er een kleine aanpassing op de code van snb nodig...
Code:
Public Function Sofi(SofiNr As String) As Boolean
  For j = Len(SofiNr) To 2 Step -1
    c9 = c9 + j * Mid(SofiNr, 10 - j, 1)
  Next
  c9 = c9 + -1 * Mid(SofiNr, 9, 1)
  If Len(SofiNr) = 9 And c9 Mod 11 = 0 Then Sofi = True
End Function
Volgens de regels moet het meest rechtse cijfer worden vermenigvuldigd met -1 ipv met 1. Hiermee zou je voorkomen dat je cijfers in het getal van plek kan verwisselen waarmee je toch een juist sofinummer kan genereren (bron: wikipedia). Beide functies geven bij normaal gebruik beide de gelijke oplossingen!

Groet, Leo
 
mijn voorkeur:
Code:
  For j = 1 To Len(SofiNr) - 1
    c9 = c9 + (10 - j) * Mid(SofiNr, j, 1)
  Next
  If j & (c9 - Mid(SofiNr, j, 1)) Mod 11 = 90 Then Sofi = True
 
Laatst bewerkt:
met voorkeur voor de kortste.... De Via Appia brevis
 
dit voorbeeld kleurt in de kolom A alle foute nummers rood

met voorwaardelijke opmaak en jouw formule

groet sylverster
 
Na het nodige speurwerk o.a bestuderen van ontvangen bijdragen (waarvoor dank) heb ik bijgevoegde code uitgewerkt. De code getest en volgens mij werkt het. Mijn vraag zet ik daarom op opgelost.
Esko
 

Bijlagen

Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan