'Class module
' class name :>> sms_calculate
Sub Class_Globals
Dim charlist As Map
Dim doublecharlist As Map
Dim utf8charlist As Map
Type sms_type (sms_char_length As Int, sms_sending_part As Int,GSM_alfabet As Boolean)
End Sub
'http://www.urlsms.com/sms-calculator/
'http://spin.atomicobject.com/2011/04/20/concatenated-sms-messages-and-character-counts/
'http://messente.com/documentation/sms-length-calculator
'https://en.wikipedia.org/wiki/GSM_03.38
'Initializes the object. You can add parameters to this method if needed.
Public Sub Initialize
Dim x1 As String=Chr(34) ' çit tırnak
Dim x2 As String=Chr(39) ' tek tırnak
charlist=(CreateMap("A":1,"B":1,"C":1,"D":1,"E":1,"F":1,"G":1,"H":1,"I":1,"J":1,"K":1,"L":1,"M":1,"N":1,"O":1,"P":1,"Q":1,"R":1,"S":1,"T":1,"U":1,"V":1,"W":1,"X":1,"Y":1,"Z":1,"Ä":1,"Ö":1,"Ñ":1,"Ü":1,"Ç":1," ":1,"a":1,"b":1,"c":1,"d":1,"e":1,"f":1,"g":1,"h":1,"i":1,"j":1,"k":1,"l":1,"m":1,"n":1,"o":1,"p":1,"q":1,"r":1,"s":1,"t":1,"u":1,"v":1,"w":1,"x":1,"y":1,"z":1,"ö":1,"ü":1,"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"¡":1,"¿":1,":":1,";":1,"<":1,"=":1,">":1,"?":1,"!":1,x1:1,"(":1,")":1,"*":1,"+":1,",":1,"-":1,".":1,"/":1,"#":1,"¤":1,"%":1,"&":1,"'":1,"ò":1,"§":1,"Ø":1,"@":1,"£":1,"$":1,"¥":1,"è":1,"é":1,"ù":1,"ì":1,"ø":1,"Å":1,"å":1,"Δ":1,"_":1,"Φ":1,"Γ":1,"Λ":1,"Ω":1,"Π":1,"Ψ":1,"Σ":1,"Θ":1,"Ξ":1,"ä":1,"ñ":1,"à":1,"Æ":1,"æ":1,"ß":1,"É":1,x2:1))
'doublecharlist.Clear ' Bu tablo standart 7-bit GSM alfavbesi 2 karakter sayılır
doublecharlist= (CreateMap("|":2,"^":2,"€":2,"{":2,"}":2,"[":2,"]":2,"~":2))
'utf8charlist.clear ' Bu tablo standart 16-bit UTF-8 alfavbesi
utf8charlist =CreateMap("Ğ":2,"İ":2,"Ş":2,"ğ":2,"ş":2,"ç":2,"ı":2)
End Sub
' message : control string / ypur message
' Return >>> Type sms_type (sms_char_length As Int, sms_sending_part As Int,GSM_alfabet As Boolean)
Public Sub sms_check(message As String) As sms_type
Dim x As sms_type
Dim chr7bit As Int=0
Dim chr16bit As Int=0
x.GSM_alfabet=True
Dim chars As String
Dim chars_length As Int
For i=0 To message.Length-1
chars=message.SubString2(i,i+1)
If charlist.Get(chars)<>Null Then
chars_length=charlist.Get(chars)
x.sms_char_length=x.sms_char_length+1 ' single char
Else
If doublecharlist.Get(chars)<>Null Then
chars_length=doublecharlist.Get(chars)
x.sms_char_length=x.sms_char_length+2 ' double char
Else
x.GSM_alfabet=False ' we fourn utf8 chars
End If
End If
Next
If x.GSM_alfabet=False Then
x.sms_char_length=message.Length*1
If x.sms_char_length>70 Then
x.sms_sending_part=Ceil(x.sms_char_length/67)
Else
x.sms_sending_part=1
End If
Else
' this lines for gsm alfabet
If x.sms_char_length>160 Then
x.sms_sending_part=Ceil(x.sms_char_length/153)
Else
x.sms_sending_part=1
End If
End If
Return x
End Sub