کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی
کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی

لوپ For Each با آرایه



اول باید دو متغیر Arr و element را با Dim اعلان کنید


Arr(0)="123"

Arr(1)="456"

Arr(2)="789"

Arr(3)="012"


For Each element in Arr

Debug.Print element

Next






لوپ زدن در فیلدهای جدول



RecordSet.Fields Property ( DAO )



کالکشن یا مجموعه Fields را باز می گرداند که ارائه کننده یا حاوی اشیاء Field ذخیره شده برای شئ مشخص شده است.فقط خواندنی ( ReadOnly )



For Each Fld in Rs.Fields

Debug.Print Fld.Name

'Or your code

Next










بازیابی ردیف ها در رکوردست


متد GetRows برای کپی از یک رکوردست استفاده میشود.این متد یک آرایه دوبعدی را باز می گرداند. اولی نمایانگر فیلدیاستون و دومی شماره ردیف است.برای مثال intField فیلد و intRecord شماره ردیف را نمایش می دهد.


Zero-Base هستند یعنی 0 در جای خود معرف ستون یا ردیف صفر است 


avarRecords(intField, intRecord)


برای گرفتن مقدار فیلد اول در ردیف دوم :


field1 = avarRecords(0,1)


برای گرفتن مقدار فیلد دوم در ردیف اول : 


field2 = avarRecords(1,0)


اگر برای آرایه از تایپ Variant استفاده شود Ubound نیز استفاده کنید و +۱ را





Dim varEmployees As Variant
varEmployees = rstEmployees.GetRows(rstEmployees.RecordCount)
تعداد ردیف های بازیابی شده
Debug.Print "Number of Rows Retrieved: " & UBound(varEmployees, 2) + 1
تعداد فیلد ( ستون های بازیابی شده )
Debug.Print "Number of Fields Retrieved: " & UBound(varEmployees, 1) + 1


چاپ در پنجره Immediate window ( محتوای  ستون ۳ و ردیف ۴)
Debug.Print "Field 3 - Row 5: " & varEmployees(2, 4)
چاپ در پنجره Immediate window ( محتوای ستون ۱ و ردیف ۲)
Debug.Print "Field 1 - Row 2: " & varEmployees(0, 1) 



لوپ در بین هر ردیف :

'Loop thru each Row
For intRowNum = 0 To UBound(varEmployees, 2) 
لوپ در بین هر ستون : 
'Loop thru each Column       
For intColNum = 0 To UBound(varEmployees, 1)   
Debug.Print varEmployees(intColNum, intRowNum),  Next
Debug.Print vbCrLf
Next









  1. Number of Rows Retrieved: 9
  2.  
  3. Number of Fields Retrieved: 5
  4.  
  5. Field 3 - Row 5: 908 W. Capital Way
  6. Field 1 - Row 2: Callahan
  7.  
  8. Last Name     First Name    Address                     City          Region
  9. ---------------------------------------------------------------------------------------------
  10. Buchanan      Steven        14 Garrett Hill             London        Null          
  11.  
  12. Callahan      Laura         4726 - 11th Ave. N.E.       Seattle       WA            
  13.  
  14. Davolio       Nancy         507 - 20th Ave. E., Apt. 2A Seattle       WA            
  15.  
  16. Dodsworth     Anne          7 Houndstooth Rd.           London        Null          
  17.  
  18. Fuller        Andrew        908 W. Capital Way          Tacoma        WA            
  19.  
  20. King          Robert        Edgeham Hollow, Winchester Way            London        Null          
  21.  
  22. Leverling     Janet         722 Moss Bay Blvd.          Kirkland      WA            
  23.  
  24. Peacock       Margaret      4110 Old Redmond Rd.        Redmond       WA            
  25.  
  26. Suyama        Michael       Coventry House, Miner Rd.   London        Null   



CopyFromRecordset : 


محتویات یک شئ ADO یا DAO Recordset را روی یک کاربرگ کپی می کند و از گوشه سمت چپ بالای محدوده مشخص شده آغاز می گردد . اگر شئ رکوردست حاوی فیلدهایی با اشیاء OLE در آنها باشد این روش با شکست مواجه خواهد شد.


For iCols = 0 to rs.Fields.Count - 1 
 ws.Cells(1, iCols + 1).Value = rs.Fields(iCols).Name 
Next 
ws.Range(ws.Cells(1, 1), _ 
 ws.Cells(1, rs.Fields.Count)).Font.Bold = True 
ws.Range("A2").CopyFromRecordset rs























تنظیم صفت پنهان کردن شئ مشخص در پنجره راهبری اکسس




KeyWord : کلیدواژه


متد SetHiddenAttribute صفت پنهان کردن یک شئ اکسس مثل ماکرو،جدول،پرس و جو و .... را تنظیم می کند


نوشتاری : 


expression.SetHiddenAttribute (ObjectTypeObjectNamefHidden)



هر سه آرگومان Required یا اجباری هستند در اولی نوع شئ مثل acTable یا acReport ، دومی از نوع رشته ای و نام شئ و سومی ازنوع Boolean فالز یا ترو را در خود جای می دهد








اضافه کردن و حذف فیلد از جدول



TableDefs Collection :

'Add

tdf.Fields.Append tdf.CreateField("Desc",dbText,200)

'Delete

tdf.Fields.Delete "Desc"







باز کردن رکوردست با استفاده از ActiveX Data Objects



ADO شما را قادر می سازد تا ساختار پایگاه داده خود  و داده های موجود در آن  را از ویژوال بیسیک دستکاری کنید.خیلی از اشیاء ADO با اشیایی که در پایگاه خود می بینید مطابقت دارند - برای مثال یک شئ Table با یک جدول Acces مطابقت دارد.یک شئ فیلد مربوط به یک فیلد در یک جدول است.



Microsoft ActiveX Data Objects 2.x Library



Function AdoRecordsetExample()
    
    Dim rs As New ADODB.Recordset
    Dim strSql As String
    
    strSql = "SELECT MyField FROM MyTable;"
    rs.Open strSql, CurrentProject.Connection
    
    Do While Not rs.EOF
        Debug.Print rs!MyField
        rs.MoveNext
    Loop
    
    rs.Close
    Set rs = Nothing
End Function







کنکور تیرماه ۱۴۰۲ : 

برترین‌ها: یکی از کاربرانی که امروز در نوبت دوم کنکور سراسری شرکت کرده بود، درباره برخورد بد مراقبان کنکور نوشته: یکی از عجیب ترین اتفاقای کنکور امروز این بود که تو حوزه نمیذاشتن کسی اب معدنی یا شکلات با خودش ببره و از هرکی میگرفتن مینداختنش سطل اشغال.... در جواب دختری که پرسید بردن اب معدنی یا شکلاتی که خودمون اوردیم چه اشکالی داره گفتن که ممکنه توش انرژی زا باشه... مثلا کسی انرژی زا بخوره کل سوالای کنکورو میتونه جواب بده؟







لوپ در رکوردهای جدول و تغییرمحتویات فیلدها



در لوپ زیر محتویات فیلدهایی که از نوع عددی نیستند به حروف بزرگ تبدیل می شوند با تابع Ucase . نکته که چندین بار تکرار کردم وقتی Edit استفاده می کنید و رکوردست خالیه چون رکوردی داخلش نیست خطای No Current Record میزنه بنابراین تعجب نکنید و اصرار به ادامه کار نداشته باشید 


UCase ("Tech on the Net")
Result: "TECH ON THE NET"

Result: "ALPHABET"
UCase ("Alphabet")



With rst
Do While Not .EOF
.Edit
For Each fld in .Fields
If Not IsNumeric(fld) then fld = UCase(fld)
Next fld
.Update
.Movenext
Loop
.Close
End With





کنکور تیرماه ۱۴۰۲ : 

برترین‌ها: یکی از کاربرانی که امروز در نوبت دوم کنکور سراسری شرکت کرده بود، درباره برخورد بد مراقبان کنکور نوشته: یکی از عجیب ترین اتفاقای کنکور امروز این بود که تو حوزه نمیذاشتن کسی اب معدنی یا شکلات با خودش ببره و از هرکی میگرفتن مینداختنش سطل اشغال.... در جواب دختری که پرسید بردن اب معدنی یا شکلاتی که خودمون اوردیم چه اشکالی داره گفتن که ممکنه توش انرژی زا باشه... مثلا کسی انرژی زا بخوره کل سوالای کنکورو میتونه جواب بده؟














لوپ در فیلدها و ذخیره در آرایه





Do While Not rs.EOF 
    For j = 0 to rs.Fields.Count-1
     Set fieldSet(j) = rs.Fields.Field(j).Value
    Next j
rs.MoveNext
Loop









رشته کانکشن به جدول اکسس



مجموعه Tabledefs را مطالعه کنید برای Link زدن و استفاده از Connect


TableDefs collection contains all stored TableDef objects in a database (Microsoft Access workspaces only).




strConnect = "MS Access;PWD=" & strPassword & ";DATABASE=" & strDbFile 










what is this

[;database=C:\sample.mdb;PWD=128]










لوپ در جدول با بازشدن رکوردست در اکسس



If Not rs.BOF And Not rs.EOF Then
        rs.MoveFirst
        While (Not rs.EOF)
            Debug.Print rs.Fields("Employee Name")
            rs.MoveNext
        Wend
    End If
    rs.Close
    Set rs = Nothing













معنی Dia inch یا قطر اینچ


قطر اینچ به معنی سایز لوله ای است که به لوله هم سایز خودش متصل شده - میگن یک لوله ۱۰ اینچ قطر اینچی برابر ۱۰ دارد بنابراین برای هدف پیشرفت/گزارش/محاسبه زمانیکه یک لوله ۱۰ اینچ به یک لوله ۱۰ اینچ دیگر جوش داده شده خروجی ۱۰ قطر اینچ است.


مثال دیگر : اگر یک سه راهه کاهنده ۴×۱۰ جوش داده شود در نتیجه جوشکاری می شود ۲۴=۴+۱۰+۱۰ ( سه راهه سه اتصال دارد) >>> اتصال سه راهه بین دو لوله جوش داده می شود در نتیجه ۳ سر دارد دو تا ۱۰ و یکی ۴ که جمعشون شده ۲۴ قطر اینچ !!!


در پروژه های ساخت قطر اینج برای اندازه گیری / ارزیابی پیشرفت ساخت اسپول لوله کشی ( Fabrication ) بکار برده می شود.اتصال جوش سایز لوله به معادل قطر اینچ جوشکاری تبدیل می شود.


فرمول قطر اینچ : 


:

Dia-Inch = Number of joints  Size of joint per Inch




inch meter برای ارزیابی پیشرفت کار در سایت هست مخصوصاً در تست پکیج هم استفاده می کنند.



لطفا نظر سنجی فراموش نشود

















عمل Transpose یا جابجائی در اکسل



جابجایی محتویات داخل ستون داخل سل های یک  ردیفی و بالعکس










تاریخ قمری




سرآغاز گاه‌شماری هجری قمری روز جمعه «۱ محرم سال ۱ هجری قمری» (۲۷ تیر سال ۱ هجری خورشیدی) برابر با ۱۶ ژوئیه ۶۲۲ میلادی قدیم (ژولینی) و ۱۹ ژوئیه ۶۲۲ میلادی جدید (گریگوری) است.[۸]



گاه‌شماری هجری قمری قراردادی یا حسابی یا رسمی به‌عنوان گاه‌شماری قمری یکنواخت در سطح جهان شناخته شده‌است. در این گاه‌شماری از روش محاسباتی خطی و غیرتجربی برای تقریب زدن طول ماه‌های قمری استفاده می‌شود. ماه‌های قمری در آن به‌طور متناوب ۳۰ روزه (ماه‌های فرد) و ۲۹ روزه (ماه‌های زوج) در نظرگرفته می‌شود و در هر سی سال، ۱۱ سال، با ۳۰ روزه کردن آخرین ماه (ذیحجه) کبیسه می‌شود. بر اساس کبیسه‌گیری رایج در یک دورهٔ سی‌ساله، سال‌های متوالی ۲، ۵، ۷، ۱۰، ۱۳، ۱۶، ۱۸، ۲۱، ۲۴، ۲۶، ۲۹ طول سال به صورت کبیسه (۳۵۵ روزه) است، یعنی چنانچه باقی‌مانده حاصل تقسیم سال قمری به عدد ۳۰ یکی از اعداد مذکور باشد آن سال کبیسه‌است؛ و در نوزده سال دیگر طول سال عادی (۳۵۴ روزه) می‌باشد.[۱۳][۱۴] با توجه به خطی و قراردادی بودن محاسبه این گاه‌شماری نسبت به سال قمری حقیقی (برابر  ۳۵۴.۳۶۷۰۸ روز) طی حدود ۲۴۱۹ سال یکبار به اندازهٔ یک روز نیاز به تصحیح دارد.[۱۵]



روزهای همۀ ماه‌های قمری با هم برابر و دقیقاً 29 روز و 12 ساعت و 44 دقیقه و 3 ثانیه یا 53059028/29 روز است. همچنین ماه‌های همۀ سال‌های قمری با هم برابر و دقیقاً دوازده ماه و برابر با 3670834/354 روز است. اما برای سهولت محاسبات هر سال قمری را 354 روز در نظر می‌گیرند، بدین جهت در یک سال، 6 ماه سی روزی و 6 ماه 29 روزی وجود دارد.

برای جبران کسری سال، هر سه سال یکبار، یک روز اضافه می‌شود؛ یعنی سال سوم 355 روز خواهد بود؛ چرا که مقدار کسری در سه سال، 3670834/0× 3 یا برابر 101/1 روز می‌شود.

نتیجه‌ی مهمی که این محاسبه دارد و نباید از آن غفلت نمود، «قاعده یک در میان» است؛ یعنی در سال قمری، ماه‌‌ها یک در میان 30 و 29 روز، هستند.






باتوجه به اینکه شروع هرماه قمری طبق رصد هلال ماه انجام میشه پس دنبال تبدیل دقیق میلادی به قمری نباشید طبق روش قراردادی می توانید پیش بروید آما در بعضی سال ها ممکن است آن روزی که باید باشد نشود ( چون برنامه نوشته شده شما رصد هلال بلد نیست )



در تصویر بالا 11 دسامبر سال 2028 را برابر 24 رجب 1450 قرار داده.

7/19/622=1/1/1 محرم

12/11/2028

datediff

Diff=513677


در جستجوی گوگل می توانید فرمول زیر برای تبدیل سال میلادی به قمری را بیابید.

H=G-622+(G-622)÷32

H=2028-622+(2028-622)÷32=1449.9375~1450


Jalali:1300/06/20

Hijri : 1340/01/08 محرم

G(MM/DD/YYYY) : 9/11/1921

Diff :  474504



جمعه ۱۳۹۱/۸/۲۶ معادل یک محرم(۱) سال ۱۴۳۴ و ۱۱/۱۶/۲۰۱۲ ( ۱۶ نوامبر)


۱۴۰۰/۶/۲۰ (۹/۱۱/۲۰۲۱:MM/DD/YYYY)

۱-بدست آوردن اختلاف روزهای دو تاریخ شمسی

سال ۱۳۹۱ کبیسه است

-تعداد روزها : از ۱۳۹۱/۸/۲۶ تا آخر سال ۱۳۹۱

۳۰+۳۰+۳۰+۳۰+۳۰-۲۶=۱۲۴

Jalali Leap Years:

۱۳۷۹، ۱۳۸۳، ۱۳۸۷، ۱۳۹۱، ۱۳۹۵، ۱۳۹۹، ۱۴۰۳، ۱۴۰۸

-تعداد روزهای ۱۳۹۲تا ۱۳۹۹ را محاسبه می کنیم بین ۱۳۹۱ تا ۱۳۹۹ تنها ۲ سال کبیسه داریم:

۱۳۹۹-۱۳۹۲+۱=۸×۳۶۵+۲=۲۹۲۲

در بالا چون سال ۹۵و۹۹کبیسه بود اختلاف ۳۶۶و۳۶۵ را برای دوسال که عدد ۲ میشد را در نظر گرفتیم.

-تعداد روزها از اول سال ۱۴۰۰ تا ۱۴۰۰/۰۶/۲۰ :

۵×۳۱+۲۰=۱۷۵


-۳ عدد بدست آمده بالا را با هم جمع می کنیم

۱۲۴+۲۹۲۲+۱۷۵=۳۲۲۱

SELECT DateDiff("d", #11/16/2012#, #09/11/2021#);3221


در تصویر زیر از آغاز تا پایان را ذکر کرده ولی در DateDiff اکسس اختلاف بین دوتاریخ را... توجه کنید که این دو باهم فرق دارند!!!




کبیسه قمری : 

سال Mod 30=2,5,7,10,13,16,18,21,24,26,29


تاریخ قمری ۱/۱/۱۴۳۴ ( ۱۳۹۱/۸/۲۶ )

اضافه کردن عدد ۳۲۲۱ به آن ( ۳۲۲۲ در باحساب)

سال های ۱۴۳۴ ، ۱۴۳۶ ، ۱۴۳۹ ، ۱۴۴۲ کبیسه هستند البته طبق فرمول بالاتر

اگر اختلاف رو ۳۲۲۲ بگیریم و نه ۳۲۲۱ معادله تابع اکسس داریم : 

۳۲۲۱-(۳۵۵-۱)-۳۵۴-۳۵۵-۳۵۴-۳۵۴-۳۵۵

-۳۵۴-۳۵۴-۳۵۵=۳۳


نتیجتا مشخص شد که تبدیل بر اساس تقویم هلالی است و نه قراردادی چون محرم سال ۹۱ بیست و نه روزه است در صورتیکه طبق تقویم قراردادی روزهای فرد ۳۰ روزه و روزهای زوج ۲۹ روزه در نظر گرفته میشود و ماه ۱۲ قمری در سال کبیسه ۳۰ روزه محاسبه می شود.


پس خودتون رو برای تبدیل به قمری یا بالعکس خسته نکنید چون قانون درستی مثل شمسی یا میلادی برا آن حکمفرما نیست.


۱۳۹۱/۸/۲۶ طبق تقویم آن زمان اول محرم است ولی تبدیل زیر ۲ محرم را نشان می دهد چرا که طبق تقویم قراردادی است و نه هلالی

tabdil




حالا خودتون قضاوت کنید 
















فرآیند ایجاد تقویم شمسی در اکسس



۱-فرمی را ایجاد می کنید شامل ۷ باتن در بالا یا بغل با نام گذاری در ویژگی کپشن آنها البته از سمت راست به چپ شامل : شنبه ، یکشنبه ، ... و جمعه 


۲-اگر روزیکم ماهی از یکسالی جمعه باشد در نتیجه باید طبق تصویر زیر ۵ ردیف ۷ تایی باتن یا لیبل داشته باشید



۳-کنترل کمبو باکس یا لیست باکسی ایجاد کنید که سال ها و نام ماه ها در آن فهرست شوند چرا که باتوجه به سال و ماه انتخابی کنترل ها یا لیبل های ایجاد شده در مرحله ۲  پر خواهندشد.

-نحوه پرشدن یا Filling : باید مشخص کنید ، اولِ هرماه چه روزی در هفته است >> شنبه ، یکشنبه و یا جمعه ، سپس در اولین ردیف در ستون شنبه تا جمعه نسبت به قرار دادن اعداد یک تا ۳۰ یا ۳۱ با توجه به ماه انتخابی اقدام کنید.


در تصویر اول فروردین ۷۱ روز شنبه است و چون فروردین ۳۱ روزه است از لیبل ۱ تا ۳۵ اعداد یک تا سی و یک در کپشن کنترل ها قرار گرفته خواهندشد.

bahesabtimeconversion

اختلاف روزهای بین دو تاریخ ۱/۱/۱ (جمعه) تا ۱۳۷۱/۱/۱ (شنبه) عدد ۵۰۰۳۸۳ روز است می توانید در آدرس اینترنتی >>باحساب<< این مقدار را بدست آورید.


اگر فرض شود که یکم جمعه باشدو ماه ۳۱ روزه ، باید از باکس  یا لیبل ۷ شروع به پر کردن  اعداد ۱ تا ۳۱ کنیم :




















این تقویم بر پایه سال اعتدالی خورشیدی برابر با ۳۶۵٫۲۴۲۱۹۸۷۸ روز است؛ که سال تقویمی آن ۳۶۵ و ۳۶۶روزه (کبیسه) می‌باشد.





















تاریخ های میلادی و معادل های شمسی


بازیگر رنج کشیده گذر از رنج ها : 




در گاه‌شماری گرگوری ده روز از تاریخ حذف گردید و کبیسه‌گیری‌های یکنواخت چهارساله نسبتاً کاهش یافت بدینگونه که سال‌های قرن غیرقابل قسمت به ۴۰۰ (مانند: ۱۷۰۰، ۱۸۰۰ و ۱۹۰۰) بدون کبیسه‌گیری باشند. در نتیجه، با احتساب سال گریگوری ۳۶۵٫۲۴۲۵ روز (نسبت به سال حقیقی ۳۶۵٫۲۴۲۱۹۸۷۹ روز) میزان دقت گاه‌شماری میلادی را به عقب‌ماندگیِ یک روز در هر ۳٬۳۲۰ سال رساند.[۶]



DateDiff from 3/22/622 ( 1/1/1 : Jalali  : Friday)

Defaults: vbSunday = 1, vbSaturday = 7


MM/DD/YYYY

datediff

bahesab


1/1/2500

DateDiff:685846

۱۸۷۸/۱۰/۱۲

0+6=6 Friday


2/18/2102

DateDiff:540527

۱۴۸۰/۱۱/۲۹

1+6=7 Saturday


3/20/2999

DateDiff:868180

۲۳۷۷/۱۲/۳۰

Wednsday


2/28/2000

DateDiff:503282

۱۳۷۸/۱۲/۹

Monday


5/23/2012

DateDiff:507750

۱۳۹۱/۳/۳

Wednesday


12/23/1978

DateDiff:495545

۱۳۵۷/۱۰/۲

Saturday


9/11/1978

DateDiff:495442

۱۳۵۷/۶/۲۰

Monday


3/20/2005

DateDiff:505129

۱۳۸۳/۱۲/۳۰

Sunday


3/19/2017

DateDiff:509511

۱۳۹۵/۱۲/۲۹


8/3/2015

DateDiff:508917

۱۳۹۴/۵/۱۲


4/1/2013

DateDiff:508063

۱۳۹۲/۱۰/۱۲


1/2/1979

DateDiff:495555

۱۳۵۷/۱۰/۱۲


1/1/2012

DateDiff:507607

۱۳۹۰/۱۰/۱۱


3/17/2012

DateDiff:507683

۱۳۹۰/۱۲/۲۷


9/21/2021

DateDiff:511158

۱۴۰۰/۶/۳۰


11/22/2026

DateDiff:513046

۱۴۰۵/۹/۱


12/10/2024

DateDiff:512334

۱۴۰۳/۹/۲۰


11/9/2026

DateDiff:513033

۱۴۰۵/۸/۱۸


11/7/1972

DateDiff:493308

۱۳۵۱/۸/۱۶


10/8/2020

510810

۱۳۹۹/۷/۱۷


3/5/2024

512054

۱۴۰۲/۱۲/۱۵


6/6/2024

512147

۱۴۰۳/۳/۱۷


10/9/2023

511906

۱۴۰۲/۷/۱۷


12/31/2023

511989

یکشنبه

۱۴۰۲/۱۰/۱۰


2/5/2023

511660

یکشنبه

۱۴۰۱/۱۱/۱۶


2/8/2023

511663

چهارشنبه

۱۴۰۱/۱۱/۱۹


9/22/2029

514081

۱۴۰۸/۷/۱

شنبه


12/31/2936

516738

۱۴۱۵/۱۰/۱۱

چهارشنبه


3/31/2036

516463

۱۴۱۵/۰۱/۱۲

دوشنبه


12/11/1961

489324

۱۳۴۰/۰۹/۲۰

دوشنبه
















روز عرفه، روز دعاونیایش/ مَاذَا وَجَدَ مَنْ فَقَدَکَ وَ مَاالَّذِی فَقَدَ مَنْ‌وَجَدَک... آن‌کس که تو را ندارد، چه‌دارد؟ و آن‌کس که تو را یافته، چه‌ندارد؟




6 تیر 1402 : مصرف الکل تقلبی


وی گفت: در بخش مراقبت‌های ویژه برخی از بیمارستان‌های خصوصی تعدادی از بیماران ناشی از مسمومیت مصرف الکل بستری هستند و همچنین در بیمارستان‌هایی که مخصوص مسمومیت است نیز نمونه‌هایی مشاهده شده است.

استاد تمام دانشگاه و فوق تخصص مراقبت‌های ویژه ادامه داد: کاهش سطح هوشیاری مسمومیت با متانول، درگیری چشمی، تاری دید است به طوری که بیمارستان‌های تخصصی چشم باید در این خصوص با ما همکاری کنند اما متأسفانه تاکنون این بیماران را پذیرش نکردند و ما فقط با متخصصینی که در بیمارستان هستند ارتباط داریم.

هاشمیان گفت: تاری دید در برخی موارد تبدیل به نابینایی می‌شود بنابراین لازم است اورژانس مخصوص چشم پزشکی برای این بیماران راه اندازی شود تا بتوان مشکلات ناشی از مسمومیت متانول را در آن سریع درمان کرد چرا که از دست رفتن زمان منجر به اتفاقات ناگواری برای این افراد می‌شود که ممکن است بیمار فوت کند.




بنا به نقل وقایع‌نگاران عاشورا وقتی یاران امام حسین(ع) شهید شدند و او تنها ماند این جملات را بر زبان راند که «هَلْ مِنْ ذَابٍّ یَذُبُّ عَنْ حَرَمِ رَسُولِ اللَّهِ ص هَلْ مِنْ مُوَحِّدٍ یَخَافُ اللَّهَ فِینَا هَلْ مِنْ مُغِیثٍ یَرْجُو اللَّهَ بِإِغَاثَتِنَا هَلْ مِنْ مُعِینٍ یَرْجُو مَا عِنْدَ اللَّهِ فِی إِعَانَتِنَا؛ آیا دفاع‌کننده‌ای هست که از حرم رسول خدا دفاع کند؟ آیا یگانه‌پرستی هست که درباره ما از خدا بترسد؟ آیا فریادرسی هست که با فریادرسی از ما به خدا امید داشته باشد؟ آیا مددکاری هست که با کمک به ما امید به آنچه نزد خداست داشته باشد؟»



مطلب زیر خرافه ای بیش نیست  چرا که علما در وجودش شک دارند چون به چشم  ندیده اند یا حداقل روایتی در این مورد از انبیاء نیست.

جناب زعفر جِنی حکایت رسیدن به محضر امام حسین (ع) را برای یکی از علما تعریف نموده که مرحوم دربندی مفصلاً آن قضیه را در کتاب مقتلش آورده:
زعفر گفت: وقتی وارد زمین کربلا شدم دیدم از چهار فرسخ تا چهار فرسخ، لشگر دشمن، امام و یارانش را محاصره کرده اند. همچنین دیدم که فوج عظیم ملائکه که به شمارش نمی آمدند، پَر در پَر ایستاده اند. در یک سمت، منصور ملک با سپاهی از ملائکه و در یک طرف میکائیل با سپاهی از ملائکه، در طرف دیگر اسرافیل با گروه عظیمی از ملائکه، همچنین ملک الرّیاح و ملک البحار و ملک الجبال و ملک دوزخ و ملک النار و ملک العذاب با لشگر خود منتظر اجازه و فرمانند. ارواح صد و بیست و چهار هزار پیغمبر از حضرت آدم(ع) تا حضرت خاتم(ص) هم صف کشیده اند. حضرت خاتم انبیاء (ص) آغوش گشوده و می فرماید: «العجل العجل انّا مشتاقون»: فرزندم شتاب و عجله کن که ما بسیار مشتاق تو هستیم».

امام با گوشه چشم به سوی من نگاه کرد، من لشگر خود را عقب گذاشته و خود را به حضور رساندم، رکاب بوسیدم و بر امام (ع) سلام نمودم، حضرت جواب سلام داد و فرمود: زعفر کجا بودی؟ عرض کردم قربانت گردم، در بئرالعلم مجلس عروسی داشتم. خبر از این واقعه شما نداشتم، خبر بی کسی و غریبی شما را که شنیدم با سی و شش هزار جن آمده ام تا یاری شما نمایم.
حضرت فرمود: وفای شما جنیان از آدمی بیشتر است. خدا و رسول از تو راضی باشند، خدمت تو را خداوند قبول نموده، لازم به زحمت تو نیست، چرا که این ها همه ملائکه فتح و ظفرند. عرض کردم: قربانت شوم چرا اجازه نمی دهی با آنان بجنگیم؟ حضرت فرمود: شما آن ها را می بینید ولی آن ها شما را نمی بینند و این از جوانمردی به دور است.
زعفر عرض کرد: آقاجان! ما هم به صورت انسان ظاهر می شویم، اگر هم کشته شویم، در راه خدا کشته و شهید شده ایم.
حضرت اجازه ندادند و به زعفر جِنی فرمودند بجای خودت برگرد.





























تبدیل شمسی و میلادی



در گاه‌شماری گرگوری ده روز از تاریخ حذف گردید و کبیسه‌گیری‌های یکنواخت چهارساله نسبتاً کاهش یافت بدینگونه که سال‌های قرن غیرقابل قسمت به ۴۰۰ (مانند: ۱۷۰۰، ۱۸۰۰ و ۱۹۰۰) بدون کبیسه‌گیری باشند. در نتیجه، با احتساب سال گریگوری ۳۶۵٫۲۴۲۵ روز (نسبت به سال حقیقی ۳۶۵٫۲۴۲۱۹۸۷۹ روز) میزان دقت گاه‌شماری میلادی را به عقب‌ماندگیِ یک روز در هر ۳٬۳۲۰ سال رساند.[۶]









سال های کبیسه شمسی و بررسی تاریخ میلادی به شمسی



In Memory Of


<<فقط جهت مطالعه>>


برای صِحَّت و سُقم فرمول اعمال شده  در مطالب زیرین لازم است با موارد خیلی بیشتری مورد آزمون قرار گیرد در نتیجه فقط جهت مطالعه قرار داده شده !!! .  اعمال آن در برنامه ها به اختیار مجری است ولی توصیه به  استفاده نمی شود.برای درآورن اختلاف دو تاریخ یا اضافه کردن تعداد روزهایی به تاریخ مد نظر می بایست سال های کبیسه از تاریخ مبنا تا تاریخ درخواستی اعمال گردد تا تاریخ دقیقی بدست آید.


در ابتدا و پایان محاسبات در متن به اختلاف یک تا چند روز در سال های بزرگتر و فاصله دار طبق این روش پی خواهید برد.پس باماباشید



برای سال‌های ۱۲۴۴ تا ۱۳۴۲ چنانچه باقی‌ماندهٔ حاصل تقسیم سال مورد نظر بر عدد ۳۳، یکی از اعداد (۱، ۵، ۹، ۱۳، ۱۷، ۲۱، ۲۶ و ۳۰) باشد آن سال کبیسه خواهد بود. و برای سال‌های اخیر (سال‌های ۱۳۴۳ تا ۱۴۷۲)، به‌جای ۲۱، باقی‌ماندهٔ ۲۲ ملاک خواهد بود.


گاه‌شماری جلالی با حفظ سرآغاز و طول سال با تغییر مبدأ، اسامی و طول ماه‌ها در قالب گاه‌شماری هجری شمسی برجی درآمده و باز با تغییراتی در طول ماه‌ها ضمن تنوع اسامی آنها، عنوان تقویم هجری شمسی پیدا کرد.

این تقویم بر پایه سال اعتدالی خورشیدی برابر با ۳۶۵٫۲۴۲۱۹۸۷۸ روز است؛ که سال تقویمی آن ۳۶۵ و ۳۶۶روزه (کبیسه) می‌باشد.



بر اساس محاسبات مرکز تقویم مؤسسهٔ ژئوفیزیک دانشگاه تهران که مرجع رسمی تقویم ایران است، از سال ۱۲۰۶ تا ۱۴۹۸ هجری شمسی این سالها کبیسه بوده‌اند یا خواهند بود:[۱۵]

۱۲۱۰، ۱۲۱۴، ۱۲۱۸، ۱۲۲۲، ۱۲۲۶، ۱۲۳۰، ۱۲۳۴، ۱۲۳۸، ۱۲۴۳

(۳۳ساله)، ۱۲۴۷، ۱۲۵۱، ۱۲۵۵، ۱۲۵۹، ۱۲۶۳، ۱۲۶۷، ۱۲۷۱، ۱۲۷۶

(۳۳ساله)، ۱۲۸۰، ۱۲۸۴، ۱۲۸۸، ۱۲۹۲، ۱۲۹۶، ۱۳۰۰، ۱۳۰۴، ۱۳۰۹

 (۳۳ساله)، ۱۳۱۳، ۱۳۱۷، ۱۳۲۱، ۱۳۲۵، ۱۳۲۹، ۱۳۳۳، ۱۳۳۷، ۱۳۴۲

(۳۳ساله)، ۱۳۴۶، ۱۳۵۰، ۱۳۵۴، ۱۳۵۸، ۱۳۶۲، ۱۳۶۶، ۱۳۷۰، ۱۳۷۵

(۳۳ساله)، ۱۳۷۹، ۱۳۸۳، ۱۳۸۷، ۱۳۹۱، ۱۳۹۵، ۱۳۹۹، ۱۴۰۳، ۱۴۰۸

(۳۳ساله)، ۱۴۱۲، ۱۴۱۶، ۱۴۲۰، ۱۴۲۴، ۱۴۲۸، ۱۴۳۲، ۱۴۳۶، ۱۴۴۱

 (۳۳ساله)، ۱۴۴۵، ۱۴۴۹، ۱۴۵۳، ۱۴۵۷، ۱۴۶۱، ۱۴۶۵، ۱۴۶۹، ۱۴۷۴

(۳۳ساله)، ۱۴۷۸، ۱۴۸۲، ۱۴۸۶، ۱۴۹۰، ۱۴۹۴، و ۱۴۹۸.


جدول اعداد تعیین‌کننده کبیسه «تقویم حسابی بهروز-بیرشک» تا سال ۳۲۹۳ هجری خورشیدی حسابی

۰ – ۴ – ۸ – ۱۲ – ۱۶ – ۲۰ – ۲۴ (۲۵) – ۲۹ – ۳۳ – ۳۷ – ۴۱ – ۴۵ – ۴۹ – ۵۳ – ۵۷ (۵۸) – ۶۲ – ۶۶ – ۷۰ – ۷۴ – ۷۸ – ۸۲ – ۸۶ – ۹۰ (۹۱) – ۹۵ – ۹۹ – ۱۰۳ – ۱۰۷ – ۱۱۱ – ۱۱۵ – ۱۱۹ (۱۲۰) – ۱۲۴

طبق جدول عددی فوق اگر در باقیمانده تقسیم سال حسابی موردنظر بر عدد ۱۲۸ (میان‌دوره متوالی) یکی از اعداد جدول فوق باقی مانده باشند آن سال کبیسه خواهد بود. با این تفاوت که برای سال‌های ۱ تا ۴۷۳ هجری خورشیدی حسابی اعداد اصلاح شده داخل (دوکمان) که یک شماره بیشتر نسبت به عدد همجوار آن است به‌جای آن به عنوان باقی مانده ملاک خواهد بود (بعلت شکاف بین دو دوره بزرگ).


سرآغاز گاه‌شماری

سرآغاز گاه‌شماری هجری خورشیدی روز جمعه «۱ فروردین سال ۱ هجری خورشیدی» (۲۹ شعبان ۱ سال پیش از هجرت) برابر با ۱۹ مارس ۶۲۲ میلادی قدیم (ژولینی) و ۲۲ مارس ۶۲۲ میلادی جدید (گرگوری) است.[۳] البته روز اول سال یک هجری خورشیدی (از ۱ فروردین تا ۲۴ شهریور) ۵ ماه و ۲۴ روز پیش از هجرت محمد (کمتر از یک سال) است.





کبیسه میلادی نو (گریگوری)

در تقویم میلادی نو سال‌هایی که بر ۴ بخش‌پذیر باشند (باقی‌ماندهٔ تقسیم آن سال بر ۴ برابر ۰ باشد) کبیسه هستند با این استثنا که از میان سال‌هایی که بر ۱۰۰ بخش‌پذیرند (سال‌های انتهای سده)، تنها آنهایی که بر ۴۰۰ نیز بخش‌پذیرند کبیسه هستند.




Leap year List from 1600 to 2100

YearYearYearYearYear
16001696179618961996
16041704180419042000
16081708180819082004
16121712181219122008
16161716181619162012
16201720182019202016
16241724182419242020
16281728182819282024
16321732183219322028
16361736183619362032
16401740184019402036
16441744184419442040
16481748184819482044
16521752185219522048
16561756185619562052
16601760186019602056
16641764186419642060
16681768186819682064
16721772187219722068
16761776187619762072
16801780188019802076
16841784188419842080
16881788188819882084
16921792189219922088
----2092
----2096

Note: 2100 will not be a leap year.





روش زیر برای تبدیل تاریخ میلادی به شمسی ثابت شده نیست ولی با کمک تابع DateDiff در اکسس می توان تا حدی  به جواب نزدیک رسید مثال هایی در زیر  برای درک بیشتر آورده ایم : 



این مطلب برای اشخاصی است که بخواهند بدون اثبات علمی به نتیجه خیلی نزدیک برسند ( مشخص کردن تاریخ شمسی و میلادی  مبنا و بدست آوردن معادل های آنها ) ... مثال های زیر خوانده شود اینجا کد نویسی آموزش داده نمی شود فقط روش برای افرادی که می توانند کد نویسی نُمایند !!! ... کد آماده در وب موجود است شما عزیزان دل می  توانید Google Search کنید . توابع اکسس ( DateDiff و DateAdd ) هم به یاری شما خواهند آمد  احتیاجی به  کد نویسی اضافه نخواهید داشت.شاد و پیروز باشید.



تبدیل تاریخ میلادی به شمسی  : ( اختلاف یک تا چند روز)


مبنای میلادی : 1/1/1922

مبنای شمسی :1300/10/11

روز هفته : یکشنبه


در مثال زیر اختلاف ۴ روز بدست آمد .

MM/DD/YYYY

1/1/2500

SELECT DateDiff("d", #01/01/1922#, #1/1/2500#)=211111

211111\365.25=577+1300=1877

211111-577×365.25=361.75~362

سال ۱۸۷۷ کبیسه نیست

362+11-30-30-29=284

یک عدد به عدد سال اضافه می شود

284-6×31-3×30=8

نتیجه باید 1878/10/12 باشد ولی روز را ۸ بدست آوردیم !!! اختلافی در حدود ۴ روز 

پس متوجه شدید که عدد ۳۶۵.۲۵ که در یکسری سایت ها بیان شده قابل اطمینان نمی باشد.

bahesab



MM/DD/YYYY

2/18/2102

SELECT DateDiff("d", #01/01/1922#, #2/18/2102#)=65792

65792\365.25=180+1300=1480

65792-180×365.25=47

47+11-30=28??? 29 is True

اختلاف یکروز 

نتیجه : شنبه 1480/11/29

bahesab

۶+۱=۷(۱ Sunday On 1922)

saturday=۷


MM/DD/YYYY

3/20/2999

SELECT DateDiff("d", #01/01/1922#, #3/20/2999#)=393445

393445\365.25=1077+1300=2377

393445-1077×365.25=70.75~71

71+11-30-30=22???? 30 is True

اختلاف ۸ روز !!!

نتیجه : 2377/12/30

bahesab



-فرض کنید تاریخ 2000/02/28 باشد



نتیجه : دوشنبه 1378/12/09 


SELECT DateDiff("d", #01/01/1922#, #02/28/2000#)=28547

28547\365.25=78

28547-78×365.25=57.5~58

58-(30-11)-30=9

bahesab

۱+۱=۲


-فرض کنید ، تاریخ 2012/05/23 باشد :


نتیجه :  چهارشنبه 1391/03/03


SELECT DateDiff("d", #01/01/1922#, #05/23/2012#)=33015

33015\365.25=90

33015-90×365.25=142.5~143

سال 90 کبیسه نیست

143-(30-11)-30-29=65

ورود به سال جدید >>> 91

65-31-31=3


91×365.25234×313×3011+3=33015.9593

۳+۱=۴(۱ sunday on 1922)



-فرض کنید تاریخ ، 1978/12/23 باشد :


نتیجه : شنبه 1357/10/2


SELECT DateDiff("d", #01/01/1922#, #12/23/1978#)=20810

20810\365.25=56

20810-56×365.25=356

سال 56 کبیسه نیست

356-(30-11)-30-29=278

ورود به سال جدید >>> 57

278-6×31-30-30-30=2


57×365.2523-11+2=20810.3811

۶+۱=۷(۱ sunday on 1922)


-فرض کنید تاریخ ، 1978/09/11 باشد :

Diff=20203

1+1=2(1 Sunday on 1922)

نتیجه : دوشنبه 1357/06/20



-فرض کنید تاریخ ، 2005/03/20 باشد :


نتیجه : یکشنبه 1383/12/30


SELECT DateDiff("d", #01/01/1922#, #03/20/2005#)=30394

30394\365.25=83

30394-83×365.25=78.25~79

سال 83 کبیسه است.اسفند ۳۰ روزه در نظر گرفته می شود.


79-(30-11)-30=30


۰+۱=۱(۱ sunday on 1922)






MM/DD/YYYY

10/03/2004

SELECT DateDiff("d", #01/01/1922#, #10/03/2004#);=30226

Never do following

--2004-1922=82

--82×365.25=29950.5

--29950.5+30+28+31+30+31+30+31+31

+30+3=30225.5~30226

30226\365.25=82

30226-82×365.25=275.5~276

سال 82 کبیسه نیست

276+11-30-30-29=198

یک عدد به عدد سال اضافه می شود : 83

198-31-31-31-31-31-31=12

نتیجه : یکشنبه ۱۳۸۳/۰۷/۱۲

bahesab

۰+۱=۱(۱ sunday on 1922)










-فرض کنید تاریخ ، 2017/03/19 باشد :


نتیجه : یکشنبه 1395/12/29


Diff : 34776

---2017-1922=95

--95×365.25+31+28+19-1=34775.75~34776

34776\365.25=95

34776-95×365.25=77.25~78(Round-Up)

سال ۹۵ کبیسه است لذا ماه ۱۲ در محاسبات و کسر از Diff در جایی که نیاز است ۳۰ روزه اعمال می گردد.

78+11-30-30=29

bahesab

۰+۱=۱(۱ sunday on 1922)





-فرض کنید تاریخ ، 2017/03/21 باشد :



 نتیجه : سه شنبه 1396/01/01


msaccess_datediff

SELECT DateDiff("d", #01/01/1922#, #03/21/2017#)=34778

34778\365.25=95

34778-95×365.25=79.25~80

سال ۹۵ کبیسه است.و ماه اسفند ۳۰ روزه در نظر گرفته می شود.

80-(30-11)-30-30=1

ورود به سال جدید 96

bahesab

۲+۱=۳(۱ sunday on 1922)



msaccess_datediff

SELECT DateDiff("d", #01/01/1922#, #03/20/2017#)=34777

34777\365.25=95

34777-95×365.25=78.25~79

سال ۹۵ کبیسه است.

79-(30-11)-30=30

۱+۱=۲(۱ Sunday on 1922)

نتیجه : دوشنبه 1395/12/30

bahesab



msaccess_datediff

SELECT DateDiff("d", #01/01/1922#, #03/17/2017#)=34774

34774\365.25=95

34774-95×365.25=75.25~76

سال ۹۵ کبیسه است.

76-(30-11)-30=27

نتیجه : جمعه 1395/12/27

۵+۱=۶(۱ sunday on 1922)

bahesab







-فرض کنید تاریخ ، 2017/06/01  باشد :

Diff=34850

نتیجه : پنج شنبه 1396/3/11

۴+۱=۵(۱ Sunday On 1922)




-تاریخ مبنای میلادی : اول ژانویه 1922

-برگردان شمسی : 11 دی 1300

SELECT DateDiff("d", #01/01/1922#, #01/02/2000#)=28490

28490\365.25=78

28490-78×365.25=0.5~1

1300+78/10/11+1=1378/10/12


۰+۱=۱(۱ Sunday 1922)




-فرض کنید تاریخ ، 2013/04/01  باشد :


نتیجه : دوشنبه 1392/01/12


SELECT DateDiff("d", #01/01/1922#, #04/01/2013#)=33328

33328\365.25=91

33328-91×365.25=90.25~91

سال 91 کبیسه است در نتیجه ماه اسفند ۳۰ روزه در نظر گرفته می شود.


91-(30-11)-30-30=12

چون باقیمانده دارد پس یک عدد به سال اضافه می شود یعنی 1392


۱+۱=۲(۱ Sunday On 1922)




-فرض کنید تاریخ ، 2012/03/20  باشد :


نتیجه : سه شنبه 1391/01/01



SELECT DateDiff("d", #01/01/1922#, #03/20/2012#)=32951

32951\365.25=90

32951-90×365.25=78.5~79

سال 90 کبیسه نیست و ماه اسفند۲۹ روزه است.

79-(30-11)-30-29=1

یک عدد به عدد سال اضافه می کنیم

1391


۲+۱=۳(۱ Sunday On 1922)




-فرض کنید تاریخ ، 2023/06/23  باشد :


نتیجه : جمعه 1402/04/02


SELECT DateDiff("d", #01/01/1922#, #06/23/2023#)=37063

37063\365.25=101=1300+101=1401

37063-101×365.25=172.75~173

سال 1401 کبیسه نیست  ( مبنا ۱۳۰۰/۱۰/۱۱ )

173-(30-11)-30-29=95

یک عدد بعدد سال اضافه میشود 1402

95-31-31-31=2


۵+۱=۶(۱ Sunday On 1922)




ms_datediff

SELECT DateDiff("d", #01/01/1922#, #12/30/2016#)=34697

34697\365.25=94

34697-94×365.25=363.5~364

364-(30-11)-30-29=286

Year=Year+1=94+1=95

286-6×31-30-30-30=10

نتیجه : جمعه 1395/10/10

bahesab

۵+۱=۶(۱ Sunday On 1922)




ms_datediff

SELECT DateDiff("d", #01/01/1922#, #8/30/2020#)=36036

36036\365.25=98

36036-98×365.25=241.5~242

سال 98 کبیسه نیست.

242-(30-11)-30-29=164

Year=Year+1=98+1=99

164-5×31=9

نتیجه : یکشنبه 1399/06/09

bahesab

۰+۱(۱ Sunday On 1922)


ms_datediff

SELECT DateDiff("d", #01/01/1922#, #11/22/2014#)=33928

33928\365.25=92

33928-92×365.25=325

سال 92 کبیسه نیست.

325-(30-11)-30-29=247

Year=Year+1=92+1=93

247-6×31-30-30=1

نتیجه : شنبه 1393/09/01

bahesab

۶+۱(۱ Sunday On 1922)



ms_datediff

SELECT DateDiff("d", #01/01/1922#, #1/31/2024#)=37285

---2024-1922=102

---102×365.25+31-1=37285.5

37285\365.25=102(1300+102=1402)

37285-102×365.25=29.5~30

سال 1402 کبیسه نیست.

30-(30-11)=11


نتیجه : چهارشنبه 1402/11/11

bahesab


۳+۱=۴(۱ Sunday On 1922)



برگردان شمسی به میلادی ( طبق تاریخ شمسی مبنا )  ... نیازمند آزمون و خطاست با چک کردن موارد بیشتر

1,4021,300=102

102×365.25+30+1111=37285.5

ms_dateadd

SELECT DateAdd("d",37285, #01/01/1922#);=1/31/2024 







MM/DD/YYYY

01/01/1964

ms_datediff

SELECT DateDiff("d", #01/01/1922#, #1/1/1964#)=15340

15340\365.25=41

15340-41×365.25=364.75~365

سال 41 کبیسه نیست.

365-30-30-29-6×31-3×30+11=11

Year=Year+1=1341+1=1342

Month:10,11,12,1...6,7..9,10

نتیجه : چهارشنبه 1342/10/11

bahesab

ms_dateadd

۳+۱=۴(۱ Sunday On 1922)




MM/DD/YYYY

03/20/1964

ms_datediff

SELECT DateDiff("d", #01/01/1922#, #3/20/1964#)=15419

15419\365.25=42

15419-42×365.25=78.5~79


42:Kabiseh


79+11-30-30=30

Month:10,11,12

نتیجه : جمعه 1342/12/30

bahesab

ms_dateadd

۵+۱=۶(۱ Sunday On 1922)




ms_datediff

SELECT DateDiff("d", #01/01/1922#, #2/24/1964#)=15394

15394\365.25=42

15394-42×365.25=53.5~54

سال 42 کبیسه است.

54+11-30-30=5

Month:10,11,12

نتیجه : دوشنبه 1342/12/05

bahesab

ms_dateadd

۱+۱=۲(۱ Sunday On 1922)





ms_datediff

SELECT DateDiff("d", #01/01/1922#, #7/20/1964#);=15541

15541\365.25=42

15541-42×365.25=200.5~201

سال 42 کبیسه است 

201+11-30-30-30=122

یک عدد به عدد سال اضافه می شود.

42+1=43

122-31-31-31=29

1+1=2(1 sunday on 1/1/1922)

نتیجه دوشنبه 1343/04/29

bahesab

ms_dateadd




MM/DD/YYYY

11/5/1996

ms_datediff

-DateDiff :

1996-1922=74

74×365.25=27028.5~27029

27029+(31-1)+28+31+30+31+30+31+31+30+31+5=27337

Or

27029+31+28+31+30+31+30+31+31+30

+31+5-1=27337

-Convert to Jalali :

27337\365.25=74

27337-74×365.25=308.5~309

سال ۷۴ کبیسه نیست در نتیجه اسفند ماه ۲۹ روزه است

309+11-30-30-29=231

Month:10,11,12

231-6×31-30=15

Month:1....6,7,8(Aban)

Year=Year+1=74+1=75

1+2=3(1 sunday on 1/1/1922)

نتیجه : سه شنبه ۱۳۷۵/۰۸/۱۵

bahesab






1/1/1940

SELECT DateDiff("d", #01/01/1922#, #1/1/1940#);=6574

6574\365.25=17

6574-17×365.25=364.75~365

سال ۱۳۱۷ کبیسه است در نتیجه ماه اسفند ۳۰ روزه در نظر گرفته می شود.

365+11-30-30-30=286

یک عدد به عدد سال اضافه می شود : 1318

286-6×31-3×30=10

نتیجه :  دوشنبه ۱۳۱۸/۱۰/۱۰

۱+۱=۲(۱ Sunday On 1922)
















اکثرا دنبال این هستیم ( حتی خود بنده ) که بتوانیم به راحتی و در کوتاهترین زمان کد  نویسی ، معادل شمسی تاریخ میلادی روز را بدست آوریم محاسبات بالا کوتاهترین راه ممکن را به نمایش در آورده ( دقیق بودن مطلب فوق باید با بررسی تاریخ های بیشتر در سال کبیسه یا غیر کبیسه مورد آزمون قرار گیرد ) . معادله بالا برای کسانیکه میخواهند یاد بگیرند که چگونه تاریخ شمسی روز را در فرم اصلی نمایش دهند مفید خواهد بود.


روش کار :

۱-در نظر گرفتن یک تاریخ میلادی و شمسی بعنوان پایه و مبنا

1922/01/01 Miladi

1300/10/11 Jalali

۲-با تابع DateDiff در اکسس تعداد روزهای بین دو تاریخ میلادی مبنا ( 1922/01/01 ) و تاریخ میلادی مورد نظر که باید تبدیل شود را استخراج می کنیم.

۳-Diff یا اختلاف روزهای دو تاریخ میلادی گفته شده در مورد ۲  را بر 365.25 تقسیم و عدد صحیح آن را بعنوان سال مورد نظر بصورت موقت در متغیری ذخیره  می کنیم.

۴-عدد صحیحِ حاصل از تفریق دو عدد Diff و مورد ۳ در 365.25 ، عددی است که باید به روز و ماه شمسی مبنا ( 10/11 ... یازده دی )  اضافه یا Add گردد.( عدد تا یک عدد بالاتررُند شود: اگر اعشار داشت اعشار حذف و یک رقم به عدد صحیح اضافه شود با توابع Fix و Abs و Int هم می توان کار را پیش برد)

۵-چنانچه سال فرضی یا موقت در مورد ۳ ، کبیسه بود اسفندماه برای کسر از عدد Diff ، سی روزه در نظر گرفته می شود. 

بطور مثال اگر سال موقت ۹۵ بدست آمد و قرار شد 102 روز به تاریخ مبنا ( غیر از در نظر گرفتن سال ) اضافه شود داریم :

Mah 10 : (30-11)=19

Mah 11 : 30

Mah 12 : 30 ( 95>>Kabiseh)

19+30+30=79

عدد 102 از 79 بیشتر است لذا یک عدد به سال اضافه شده و سال واقعی 96 خواهد بود.

102-79=23

چون عدد مانده 23 روز و کمتر از یکماه است لذا در ماه اول قرار داریم و ماه و روز به ترتیب 1 و 23 خواهد شد.

۶-اختلاف اول ژانویه تا آخر اسفند برای سال کبیسه 79 و سال غیر کبیسه 78 روز است البته اول ژانویه ای هم داریم که معادل ۱۲ دیماه است پس این دوعدد گفته شده کاملا Reliable برای شما نیست بدلیل اینکه اول ژانویه می تواند در ۱۲ دی ماه بیافتد.


-به ساخت توابعی چون زیر نیاز است :

--تابع M_DAY برای مشخص نمودن تعداد روزهای ماه های شمسی و دارای دو آرگومان سال و ماه : سال برای مشخص نمودن کبیسه

Select Case M

Case 1 To 6:D=31:Case 7 To 11:D=30:Case 12:D=iif(Kabiseh(S)=True,30,29):End Select

--نوشتن تابع کبیسه : در بالا توضیح داده شده که برای سال های 1300 که مبنای ما است تا ... و 1343 تا 1472 چطور باید محاسبه گردد.

--عدد Diff تا یکرقم رُند شود.

--تابعی برای کسرروزهای ماه ها از عدد Diff بدست آمده در مورد ۲ :

۱-اضافه کردن عدد ۱۱ ( ماه ۱۰  : شمسی مبنا) به عدد Diff

2-لوپ تا زمانیکه Diff عدد مثبتی بدست آید ادامه پیدا خواهد کرد.

3-  کسر تعداد روزهای هرماه ( از 10 ببعد ) از عدد Diff.

نکته :بعد ازانجام هر کسری باید یک عدد به M که معرف ماه است اضافه شود اگر M بزرگتر از ۱۲ شد M دوباره یک شود و به سال هم یک عدد اضافه شود

مثال : 

M=10

S=92

Diff=325

325+11=336

---Loop :

336-(M:10)30=306

M=M+1=11

M>12 : False

306-(M:11)30=276

M=M+1=12

M>12 : False

276-(M:12)(S:92:Kabiseh=0)29=247

M=M+1=13

M>12 : True>>>M=1>>>S=S+1=93

247-(M:1)31=216

.

.

.

M=M+1=8

M>12 : False

31-(M:8)30=1

M=M+1

1-(M:9)30=-29>0 : False

---End Loop




MM/DD/YYYY

08/18/2020

ms_datediff

SELECT DateDiff("d", #01/01/1922#, #8/18/2020#);=36024

Leap_years_in_the_Gregorian_calendar

--2020-1922=98

--98×365.25+31+28+31+30+31+30+31-1=36023.5~36024

36024\365.25=98

36024-98×365.25=229.5~230

سال ۹۸ کبیسه نیست بنابراین ماه اسفند ۲۹ روزه در نظر گرفته می شود.

230+11-30-30-29=152

در اینجا یکسال به سال 98 اضافه می شود 

152-31-31-31-31=28

bahesab

1+2=3(1 sunday on 1/1/1922)

نتیجه : سه شنبه ۱۳۹۹/۰۵/۲۸



MM/DD/YYY

12/30/2093

SELECT DateDiff("d", #01/01/1922#, #12/30/2093#);=62821

--following is not applicable on 1922 and the past!!!

-171×365.25+31+28+31+30+31+30+31+31+30+31+30+301=62820.75~62821

62821\365.25=171+1300=1471

62821-171×365.25=363.25~364

سال ۱۴۷۱ کبیسه نیست و ماه اسفند ۲۹ روزه می شود.

364+11-30-30-29=286

یک عدد به عدد سال اضافه می شود : 1472

286-6×31-3×30=10

1+3=4(1 sunday on 1/1/1922)

نتیجه : چهارشنبه ۱۴۷۲/۱۰۱۰


vbSunday

1

Sunday

vbMonday

2

Monday

vbTuesday

3

Tuesday

vbWednesday

4

Wednesday

vbThursday

5

Thursday

vbFriday

6

Friday

vbSaturday

7

Saturday



MM/DD/YYYY

02/19/1956

SELECT DateDiff("d", #01/01/1922#, #2/19/1956#);=12467

12467\365.25=34

12467-34×365.25=48.5~49

49+11-30=30

29 Is True

نتیجه : یکشنبه ??? 1334/11/30

۰+۱=۱(۱ Sunday On 1922)

تاریخ بالا  1334/11/29 اعلام شده که می بایست بصورت یک شمارشگرعدد 12467 به تاریخ مبنا اضافه شود با در نظر گرفتن سال های کبیسه 






MM/DD/YYYY

12/27/2119

SELECT DateDiff("d", #01/01/1922#, #12/27/2119#);=72313

72313\365.25=197+1300=1497

72313-197×365.25=360.72~361

سال ۱۴۹۷ کبیسه نیست.

361+11-30-30-29=283

یک عدد به عدد سال اضافه می شود : 1498

283-6×31-3×30=7????>>>>6 is True


برای تاریخ بالا مشخص شد عدد 365.25 یکروز اختلاف را نشان میدهد در نتیجه بهتر است :

-با عددی که  در ابتدا بیان شد  کار را با تاریخ های بیشتری مورد آزمون قرار دهید . یا حاصل تفریق سال در عدد مورد نظر و Diff را در کبیسه RoundUp کنید یا اینکه یک عدد به عدد صحیح حاصل تفریق اضافه نمائید با حذف اعشارالبته.



این مطلب جهت نشان دادن یکروز اختلاف که قبلا گفته شد ارائه گردید 



















 







                  














در صورتیکه مطلب فوق کمکی به شما نُمود لطفا در نظرسنجی شرکت کرده و یا کامنت بگذارید.

باسپاس فراوان از خواندن این مطلب



تیر ۱۴۰۲ : ( خزعلی ) معاون رییس جمهور در امور زنان و خانواده همچنین در دیدار با مردم روستای گرَهوِن افزود: ۲۰۰ میلیون تومان وام و ۲۰۰ میلیون تومان کالابرگ تهیه جهیزیه و ۲۰۰ میلیون وام اشتغال بخشی از تسهیلاتی است که به دهه شصتی‌ها ارائه می‌شود.
































دریافت داده از ترازو ( Scale )




NETComm6.Output = "p" & Chr(13) 'send PRINT command to the scale.
Dim Buffer As String 'define Buffer    
Buffer$ = Buffer$ & NETComm6.InputData 'wait for the data come into the serial port    
WtInfo = Buffer

And i got this
80 00 000S99291235 F80 00 000S99291236 E80 00 000S99291237 D80 00 000S99291238 K80 00 000S9929123



Weight = Wtarray(0)   // assuming the weight is in the 1st position 




Vbcrlf

-Command: SI + CR + LF (53h, 49h, 0Dh, 0Ah)

Response: <LONG> (after establishing stable value)


-Command for Print

Command: SP + <Weight> + CR + LF

Response: <print>


-Enquiry for current weight value

Command: Sx1 + CR + LF

Response: <LONG>













I have a Magellan scanner/scale. It is connected to my pc through rs232. I can read the weight on the scale by sending the command S11 + ENTER in Hyperterminal program and the weight shows on Hyperterminal with no problems at all.



SI + ENTER





7bit


شاتوت (شاه توت : غرب آسیا ) دارای قند طبیعی و سرشار از ویتامین ها مثل کلسیم ، پتاسیم و منیزیم ... ضدسرطان .. پاک کردن روده ها و رفع یبوست ( نه مزمن )




GSM 03.40


SEND SMS through At Command



00150008810100358500600831c7321d14be87f320b3fcdd06a1cbf23228dd6e97c9e930bdccce87422194f6fd2683cc6179580e5abfdd29


TP-UDL : 31(hex) 3×16+1=49

TP-UD :

c7321d14be87f320b3fcdd06a1cbf232

28dd6e97c9e930bdccce87422194f6fd

2683cc6179580e5abfdd29


-Decode UD

--bring hexes from the last to the first 

29ddbf......C7

--Convert hexes to binary (8bit)

0010100111011101....11000111

29(00101001)

--Remove zero(s) at the left

43×8-Int(43×(8/7))×7=1

--Arrange binaries in 7bit

--Convert binary to hex

--Arrange hexes from the last to the first

--Convert hexes to string





Encoding :

Hex_Count=49

Add Zero(s) at the left

[int(48×(7/8))+1]×8-49×7=1 Zero

Arrange binaries in 8bit

Decoding :

Hex_Count : 43

Remove Zero(s) at the first

How many?

43×8-int(43×(8/7))×7=1 Zero

Arrange binaries in 7bit



کاهش شدید ارزش پولی ظرف فقط ۲۰ ماه




رسول خدا در خطبه ای فرمود:  أَیُّهَا النَّاسُ إِیَّاکُمْ وَ خَضْرَاءَ الدِّمَنِ ای مردم از سبزه مزبله پرهیز کنید.

سؤال شد: "خضراء الدمن= سبزه مزبله"  چیست؟

پیامبر فرمود:  الْمَرْأَةُ الْحَسْنَاءُ فِی مَنْبِتِ السَّوْءِ

زن زیبا رو و رعنا که در محیط نامناسب پرورش یافته و پرورده محیط نامناسب اعتقادی و اخلاقی است. (1)

پس خضراء الدمن یعنی دختران  زیبارویی که در خانواده و محیط ناپاک رشد یافته و گر چه زیبا و رعنا و ماننده سبزه بهار خوش آب و رنگ هستند، ولی ناپاک اند. از لحاظ اخلاق و پای بندی  به عفت و حیا، با توجه به تربیت ناپاکی که داشته اند ، نمره قبولی نمی گیرند.



امکان رشد مجدد دندان‌ها به صورت نامحدود

تا کنون تمام آزمایشات بر روی موش‌های مبتلا به این بیماری دندانی انجام شده است. در طی مطالعات، محققان ژنی را کشف کردند که پروتئینی را که در رشد یا عدم رشد دندان نقش دارد، رمزگذاری می‌کند. محققان دریافتند موش‌هایی که فاقد ژن خاصی هستند، تعداد دندان‌هایشان افزایش یافته است. پروتئینی به نام (USAG-۱) که توسط این ژن سنتز شده است، رشد دندان‌ها را محدود می کند.

هنگامی که همه چیز طبیعی باشد، روند رشد پس از جایگزینی دائمی دندان متوقف می‌شود، بر این اساس دانشمندان با تمرکز بر روی این پروتئین آنتی بادی را تولید کردند که می‌تواند به طور موقت از عملکرد این پروتئین جلوگیری کرده و به دندان‌های جدید اجازه رشد دوباره بدهد.



کامنت یکی از شهروندان در بهبودی با لیزر :

سلام.لیزر پرتوان وکم‌توان به جز هزینه ی زیادی که برای بیمار دارد.هیچ خاصیت دیگری در درمان آن ندارد و فقط بعنوان تکنولوژی جدید جیب بیماران را به نفع صاحب دستگاه لیزر خالی میکنند.که اتفاقا همان فیزیوتراپی اثر خیلی بهتری در درمان دارد.
بعد از ده جلسه لیزرپرتوان و نداشتن یک سر سوزن اثر .پزشک معالج همان فیزیوتراپی را تجویزکردند و از بیماران دیگر هم که از لیزر استفاده کرده اند .سوال کردم که هیچکدام راضی نبوده اند و هیچ خاصیتی نداشته. بجز خالی کردن جیب بیمار . واقعا متاسفم برای افرادی که از این دستگاه بعنوان درمان استفاده می کنند و جیب بیماران را خالی میکنن.و متاسفانه پزشکان هم آنها را به این لیزر هدایت میکنند.
لطفا این مطلب رامنتشر کنید که حداقل بقیه بیماران گرفتار این دام لیزر نشوند.




























TP-DCS



26 خرداد 1402 

نتایج طرح فروش خودرو در سامانه یکپارچه اعلام شد و طی آن شاهد هستیم که برای بسیاری از متقاضیان، خودرویی تخصیص نیافته است و بسیاری دیگر نیز باید خودروهای خود را در زمستان ۱۴۰۳ تحویل بگیرند که این مسئله با قول هایی که پیش از این برای تحویل فوری خودروها به مردم داده شده بود کاملاً متناقض است.





11110010 : F2

F0 (240) GSM 7bit  Class 0 (Flash Message)

F1(241)  GSM 7bit Class 1 (ME-specific)

F2(242) GSM 7bit Class 2 (SIM/USIM specific)

F3(243) GSM 7bit Class 3 (TE-specific)

F4(244) 8 bit data Class 0 ( Flah message)

E3(227)    UCS2       Other Inactive

18(decimal:24)   Class 0 (Flash Msg)


76543210<<<Bits

00101000<<<Binary


Coding Group Bits 7..4 :

-00xx : Like 0001 : General Data Coding indication

--Bit 3..0

General Data Coding indication
Bits 5..0 indicate the following:
Bit 5
0    Text is uncompressed
1     Text is compressed
Bit 4
  0  Bits 1 and 0 are reserved and have no message class meaning
1    Bits 1 and 0 have a message class meaning
Bit3 Bit2   Alphabet being used
  0             0            Default alphabet
  0             1           8 bit data

  1             0           UCS2 (16bit)

  1             1            Reserved
Bit1 Bit0  Message class   Description
  0               0              Class 0                    Immediate display (alert)
  0               1              Class 1                         ME specific
  1               0              Class 2                         SIM specific
  1               1              Class 3                          TE specific


NOTE: The special case of bits 7..0 being 0000 0000 indicates the Default Alphabet as in Phase 2



-0100 ... 0111 : Message Marked for Automatic Deletion

-1100Message Waiting Indication Group: Discard Message

--Bits 3..0 are coded in exactly the same way as Group 1101, however, with bits 7..4 set to 1100 the mobile may discard the contents of the message, and only present the indication to the user.


00150008810100358500CB0002C834

CB : 1100  1011

(1011)

Bits1,0 : 11 : Other Message

Bit2 only set to 0

Bit 3 : Set Indication Active



-1101Message Waiting Indication Group: Store Message ( Only 7 bit)

-- This Group allows an indication to be provided for the user about the status of types of message waiting on systems connected to the GSM PLMN. The mobile may present this indication as an icon on the screen, or another MMI indication. The mobile may take note of the Origination Address for the message in this group and group 1100. For each indication supported, the mobile may provide storage for the Origination Address which is to control the mobile indication.

Text included in the user data is coded in the Default Alphabet.
Where a message is received with bits 7..4 set to 1101, the mobile will store the text of the SMS message in addition to setting the indication.
Bit 3           Descrption
   0         Set Indication Inactive
   1         Set Indication Active



Bit1  Bit0    Indication Type
   1       0      Voicemail Message Waiting
   0       1      Fax Message Waiting
   1       0      Electronic Mail Message Waiting
   1      1      Other Message Waiting

Bit 2 is reserved , and set to 0


* Mobile manufacturers may implement the "Other Message Waiting" indication as an additional indication without specifying the meaning. The meaning of this indication is intended to be standardized in the future, so Operators should not make use of this indication until the standard for this indication is finalized.



-1110Message Waiting Indication Group: Store Message (Only UCS2)

--The coding of bits 3..0 and functionality of this feature are the same as for the Message Waiting Indication Group above, (bits 7..4 set to 1101) with the exception that the text included in the user data is coded in the uncompressed UCS2 alphabet.


-1111Data coding/message class (Only GSM 7 bit & 8 bit data)

Bit 3 is reserved , set to 0

Bit2 Message coding

0             Default alphabet

1             8-bit data

Bit1 Bit0 Message Class  Description

0           0           Class 0                   Immediately

display(alert)

0          1          Class 1                  Me specific

1          0          Class 2                  SIM specific

1          1          Class 3                  TE specific



F0(240) GSM 7 bit Class 0 (Flash message)            -

F1(241) GSM 7 bit Class 1 (ME-specific)                   -

F2(242) GSM 7 bit Class 2 (SIM/USIM-specific) -

F3(243) GSM 7 bitClass 3 (TE-specific)                      -

F4(244) 8 bit data Class 0 (Flash message)             -

F5(245) 8 bit data Class 1 (ME-specific)                    -

F6(246) 8 bit data Class 2 (SIM/USIM-specific)  -

F7(247) 8 bit dataClass 3 (TE-specific)

- : Uncompressed , + : Compressed








0015000881010035850048000406450646


48 >>> 0 1 0 0 1 0 0 0

Bit5 : 0 : Uncompressed

Bit4 : 1 : Bits 1 and 0 have a message class 

Bits3,2 : 10 : UCS2(16bits)

Bits1,0 : 00 : Message Class 0


00150008810100358500600002C834

60(96) Gsm 7 bit Default (+: Compressed)

-0110 : Message Marked for Automatic Deletion



PDU TYPE : 15

00010101

Bits1,0 : 01 : SMS-SUBMIT

Bit2 : 1 : RD (Reject duplicate)

Bits4,3 : 10 : VPF : Present (here 00 after 60)

Bit5 : 0 : SRR : Status report not requested

Bit6 : 0 : UDHI : Not present

Bit7 : 0 : RP (Reply path)






























SMS-SUBMIT binary 8bit



15010A91561904472800F4A718496E6920636F6E746F6820666C61736820534D53206C686F

TP-DCS
F0   GSM 7 bit Class 0 (Flash message)
F4   8 bit data  Class 0 (Flash message)


-1st byte: 0×15 or in binary 00010101
--TP-MTI (bit 0&1) = 01 means this PDU SMS type is SMS-SUBMIT
--TP-RD (bit 2) = 1 means reject duplicate if there’s a same SMS with same TP-MR
--TP-VPF (bit 4&3) = 10 means this SMS contain validity period info with relative format
--TP-SRR (bit 5) = 0 means we don’t ask for delivery report
--TP-UDHI (bit 6) = 0 means no user data header information (UDHI)
--TP-RP (bit 7) = 0 means reply path unused
-2nd byte: TP-MR = 0×01, means message reference number is 0×01
-3rd byte: TP-DA length = 0x0A, this is length of destination address.I want to send to my own number which is 6591407482 -> see there’re 10 digits, to TP-DA should be 0x0A or 10 in decimal
-4th byte: TON/NPI info = 0×91 or in binary format 10010001
--TON (bit 6,5,4) = 001 -> means International Number
--NPI (bit 3,2,1,0) = 0001 -> means ISDN telephone number
-5th byte .. 9th byte: 5619044728 -> this is the destination number 6591407482 but written in BCD semioctet format
-10th byte: TP-PID = 0×00 -> means use default protocol identifier
-11th byte: TP-DCS = 0xF4 or in binary format 11110100
--Bit 3,2 = 01, means TP-UD (user data) is encoded using 8 bit format
--Bit 0,1 = 00, means class 0 {this will make this sms become flash sms}
-12th byte: TP-VP = 0xA7 means this SMS is valid only for 24 hours
-13th byte: TP-UDL = 0×18 means the user data/message part length is 24 character
-the rest byte: 
-496E6920636F6E746F6820666C61736820534D53206C686F + Thi is hex representation of string “Ini contoh flash SMS lho”




SMS-SUBMIT 7bit







0001000C91180910325476400005E8329BFD06


-PDU Type : 01

--00000001 >>> 01 : SMS-SUBMIT

-DA : 0C9118091032547

-PID : 40

-DCS : 00 : Alphabet 7bit

-UDL : 05 in hex

UD : E8329BFD06



Decoding Data :

E8 32 9B FD 06

-Reverse Hex

06 FD 9B 32 E8

-Hex to binary

00000110 11111101 10011011 00110010

11101000

-Remove zero from the left

Hex_Count : 5

5×8-int(5×8/7)×7=5

00000110 11111101 10011011 00110010

11101000


110 11111101 10011011 00110010

11101000

-7bit

1101111 1101100 1101100 1100101 1101000

-Put zero before each 7bit

01101111 01101100 01101100 01100101 01101000

-Binary to hex

6F 6C 6C 65 68

-Reverse hex

68 65 6C 6C 6F

-Hex to string

68656C6C6F

Char Count : 5 







At the beginning of both PDUs, 00 is added as the SCA (Service Center Address) to indicate the default SMSC, and 01 is set in the TP-MTI to indicate SMS-SUBMIT. The TP-PID is set to 00 for a normal text message, and 40 (bit pattern: 01000000) for short message type 0. The phone number +819001234567 set as the TP-DA in the figure is a dummy. The TP-UD is set to hello encoded in GSM 7-bit characters


64/16=4,Reminder=0>>>40


For TP-PID = 63 the SC converts the SM from the received TP Data Coding Scheme to any data coding scheme supported by that MS (e.g. the default).


56–62SC-specific; usage based on mutual agreement between the SME and the SC
63A GSM/UMTS mobile station.
64Short Message Type 0
65Replace Short Message Type 1
66Replace Short Message Type 2
67Replace Short Message Type 3
68Replace Short Message Type 4
69Replace Short Message Type 5
70Replace Short Message Type 6
71Replace Short Message Type 7



نوع پیام کوتاه 0 به عنوان پیامک بی صدا Silent SMS شناخته می شود. هر گوشی باید بتواند چنین پیام کوتاهی را دریافت کند، صرف نظر از اینکه حافظه در (U)SIM یا ME موجود است یا خیر، باید دریافت پیام را تأیید کند، اما نباید دریافت آن را به کاربر نشان دهد و باید محتوای آن را دور بیندازد. بنابراین پیام در (U)SIM یا ME ذخیره نخواهد شد.



فلش اس ام اس نوعی پیامک است که مستقیماً در صفحه اصلی بدون تعامل کاربر ظاهر می شود و به طور خودکار در صندوق ورودی ذخیره نمی شود. این می تواند در مواقع اضطراری، مانند اعلام حریق یا موارد محرمانه، مانند ارائه رمزهای عبور یکبار مصرف، مفید باشد.












































decode SMS-DELIVER


پیامک دریافتی 



SMS DELIVER:
SCA-PDU TYPE-OA-PID-DCS-SCTS-UDL-UD


07917238010010F5040BC87238880900F100009930925161958003C16010


-SCA : 07917238010010F5

--Length: 07 in hex (2byte:2digits)

--10010001 : 91 ( + ) International code

including EXT,TON,NPI

TON ( Type of number ) :bit 6,5,4

000 Unknown

001 International number

010 National number

100 Subscriber number
101 Alphanumeric, (coded according to 3GPP TS 23.038 [9] GSM 7-bit default alphabet)
110 Abbreviated number

NPI ( Numbering plan ) bit 3,2,1,0

0000 Unknown
0001 ISDN/telephone numbering plan (E.164/E.163)
0011 Data numbering plan (X.121)
0100 Telex numbering plan

1000 National numbering plan

1001 Private numbering plan

--7238010010F5
---Ext:1;TON:001;NPI:0001

---Reverse number 2byte from the left

27831000015

So Address is ... +27831000015

-PDU Type : 04 in hex 

MTI :

00         MS>SC SMS-DELIVER-REPORT

00         SC>MS SMS-DELIVER

01         MS>SC SMS-SUBMIT

01        SC>MS SMS-SUBMIT-REPORT

10        MS>SC SMS-COMMAND

10        SC>MS SMS-STATUS-REPORT

11        any           Reserved        


--00000100 ( bit7....bit0 )

---bit0,1 : 00 : SMS-DELIVER

---bit2 : 1 : MMS (0=More message)

---bit3 : 0

---bit5 : 0 : SRI (Status report indication)

---bit6 : 0 : UDHI

---bit7 : 0 : RP(Reply path) 

-OA : 0BC87238880900F1

From this address issued

--Length : 0B in hex

--11001000 : C8

Including EXT,TON,NPI

bit3..0 : NPI : 1000 :national numbering

bit6.4 : TON : 100 : Subscriber number

bit7 : EXT : 1 : Extension

--7238880900F1

---Reverse number 2byte from the left 

27838890001

-PID : 00

-DCS : 00

-SCTS : 99309251619580

Time stamp

2099/03/29 15:16:59 08

-UDL : 03

UD : C16010


Decoding UD (user data)


-Reverse hex

10 60 C1

-Hex to binary (octet : 8bit)

00010000 01100000 11000001

-Remove Extra zero from the left

[int(3×(7÷8))+1]×8-3×7=3

10000 01100000 11000001

-set 7bit binary

1000001 1000001 1000001

-Binary to hex

41 41 41

-Revers hex (Bring the hexes in order from end to first)

41 41 41

-Hex to string

AAA




Finally decided done successfully




00040A91890100358500001230205181020C074374589EA6E701


-4374589EA6E701

01 E7 A6 9E 58 74 43

00000001 11100111 10100110

10011110 01011000 01110100

01000011


[int(7×7/8)+1]×8-7×7=7


00000001 11100111 10100110

10011110 01011000 0111010



1111001 1110100 1101001

1110010 1100001 1101000

1000011


01111001 01110100 01101001

01110010 01100001 01101000

01000011


-79 74 69 72 61 68 43


-43 68 61 72 69 74 79


hex to string (43686172697479)


----------------------------------

-Example 

Encoding :

69 Character Or 69 Hex

7bit>8bit ... Add Zero

[int(69×(7÷8))+1]×8-69×7=5

61×8-69×7=5

Decoding :

61 Hex

8bit>7bit ... Remove zero

61×8-int(61×8/7)=5

61×8-69×7=5

----------------------------------


-Encode following hexes


5a6f6f647461722062696120696e6a

6120756e6a61206e612e




Reverse Hex :

2e 61 6e 20 61 6a 6e 75 20 61 6a 6e

69 20 61 69 62 20 72 61 74 64 6f 6f

5a

Hex to ninary , only 7bit from right

0101110 1100001 1101110 0100000

1100001 1101010 1101110 1110101

0100000 1100001 1101010 1101110

1101001 0100000 1100001 1101001

1100010 0100000 1110010 1100001

1110100 1100100 1101111 1101111

1011010

Add Zero to the left

Hex or chararter count : 25

[int(25×(7÷8))+1]×8-25×7=

22×8-25×7=1

0 0101110 1100001 1101110 0100000

1100001 1101010 1101110 1110101

0100000 1100001 1101010 1101110

1101001 0100000 1100001 1101001

1100010 0100000 1110010 1100001

1110100 1100100 1101111 1101111

1011010

8bit

00101110 11000011 10111001

00000110 00011101 01011011

10111010 10100000 11000011

10101011 01110110 10010100

00011000 01110100 11100010 01000001 11001011 00001111

01001100 10011011 11110111

11011010

Binary to hex

 00101110 11000011 10111001

2e c3 b9

00000110 00011101 01011011

06 1d 5b

10111010 10100000 11000011

ba a0 c3

10101011 01110110 10010100

ab 76 94

00011000 01110100 11100010

18 74 e2

01000001 11001011 00001111

41 cb 0f

01001100 10011011 11110111

4c 9b f7

11011010

da

Reverse hex

da f7 9b 4c 0f cb 41 e2 74 18 94 76 ab

c3 a0 ba 5b 1d 06 b9 c3 2e


25 (character)  to hex : 25÷16=1,Reminder=9>>19

00040A91890100358500003220208080120819daf79b4c0fcb41e274189476abc3a0ba5b1d06b9c32e



decoding

da f7 9b 4c 0f cb 41 e2 74 18 94 76 ab c3 a0 ba 5b 1d 06 b9 c3 2e

Reverse hex and convert to binary

00101110 11000011 10111001

00000110 00011101 01011011

10111010 10100000 11000011

10101011 01110110 10010100

00011000 01110100 11100010 01000001 11001011 00001111

01001100 10011011 11110111

11011010

Remove zero

Hex_Count=22

22×8-25×7=1

00101110 11000011 10111001

00000110 00011101 01011011

10111010 10100000 11000011

10101011 01110110 10010100

00011000 01110100 11100010 01000001 11001011 00001111

01001100 10011011 11110111

11011010


0101110 11000011 10111001

00000110 00011101 01011011

10111010 10100000 11000011

10101011 01110110 10010100

00011000 01110100 11100010 01000001 11001011 00001111

01001100 10011011 11110111

11011010

-7bit to hex (can add zero to each 7bit then convert to hex)

0101110 1100001 1101110

2e 61 6e

0100000 1100001 1101010

20 61 6a

1101110 1110101 0100000

6e 75 20

1100001 1101010 1101110

61 6a 6e

1101001 0100000 1100001

69 20 61

1101001 1100010 0100000

69 62 20

1110010 1100001 1110100

72 61 74

1100100 1101111 1101111

64 6f 6f

1011010

5a


2e 61 6e 20 61 6a 6e 75 20 61 6a 6e

69 20 61 69 62 20 72 61 74 64 6f 6f

5a

Reverse hex and convert to string

5a6f6f647461722062696120696e6a

6120756e6a61206e612e























Concatenates message



If you send a long text message containing only characters that are part of the GSM 03.38 character set, then each SMS segment can contain up to 153 characters. (140 bytes - 6 bytes for the concatenation header leaves 134 available bytes, or 7 * 134 = 1072 bits. The most 7-bit characters that can be packed into 1072 bits is 153.)

If you send a long text message that includes any characters that require Unicode encoding, then each SMS segment can contain up to 67 characters. (67 * 16 = 1072 bits)


140×8=1120   1byte=8bits 

160×7=1120    1byte=7bits

1120-6×8(see below)=1072

1072/7=153 in 7bit 

1072/8=134 in 8 bit 


05 00 03 CC 02 01=6Byts=6×8bits=48bits


in 12bits ( Unicode )  like persian

(1072-48)/16=67 Characters can be sent in  each part



UDHI 


05 00 03 44 03 01


05 : Length including 5 byte
00 : indicate multipart
03 : Subpart length
44 : Refrences from 00 to FF
03 : Total number to be send
01 : Sequence number



در ارسال بصورت پَک شده ۷ بیتی برای ارسال پیامک
چند پارتی 153 کاراکتر قابل ارسال است و در ۸ بیتی
134 کاراکتر ... در یونیکد یا 16 بیتی تنها 67 کاراکتر
را می توان در هر پارت ارسال کرد تا در مبدا بصورت
پیوسته در قالب یک پیام مشاهده شوند.

در ارسال بصورت پک شده ۷ بیتی می بایست در ابتدا
hex اسکی کد کاراکتر را برعکس نموده و تبدیل به
باینری کرد ، سپس محاسبه کرد که چند صفر قبل از
اولین کد باینری قرار گیرد تا تعداد جمع مجموعه بر ۸
تقسیم پذیر باشد.۷ رقم ۷ رقم جداسازی کرده و به هگز
تبدیل می نمائیم ، هگزهای بدست آمده را از آخر به اول
مرتب کرده و آنرا به کاراکتر تبدیل می کنیم.
در ارسال بصورت ۸ بیتی همان تبدیل به هگز کافیست
در ارسال بصورت ۱۶ بیت هم همان کد یونیکد کاراکتر
قرار می گیرد.


مثال در ارسال بصورت پَک ۷ بیتی :
فقط کدهای اسکی در ۷ بیتی مجاز هستند
ارسال کلمه Hi ... به طول ۲ بایت
Hex(H)=48
Hex(i)=69
هگزها را از آخر به اول مرتب می کنیم
69 48
هگزها را به باینری تبدیل می کنیم البته ۷ بیتی
یعنی جدا کردن ۷ رقم از سمت راست بایتری ۸
بیتی
69 : 01101001
48 : 01001000
حال باید از سمت راست ۷ رقم جدا کرد
1101001 1001000
در اینجا چند صفر می بایست قبل از باینری اول
قرار داد؟ تا جائیکه تعداد کل بر ۸ بخشپذیر باشد
2×7=14
16 بر ۸ بخشپذیر است لذا اگر 14 را از 16 کم
کنیم عدد باقیمانده 2 است پس 2 تا صفر اضافه
می کنیم
00 1101001 1001000
شروع به جداسازی ۷ رقم ۷ رقم می کنیم
00110100 11001000
باینری را به هگز بر می گردانیم
34 C8
هگزها را از آخر به اول مرتب می کنیم 
C834

0011000A9189010035850000AA02C834

PDU Type : 11
MR : 00
DA : 0A918901003585
PID : 00
DCS : 00 7bit ( Alphabet )
VPF : AA ( 4 days validity period )
UDL : 02 Length of char in hex
UD : C834 ( Hi )


129÷16=8 , Reminder=1
145÷16=9 , Reminder=1
129- if the value of address does not start with
a "+" character. For example, "85291234567".
145- if the value of address starts with a "+"
character. For example, "+85291234567"

Address 

octetMeaning
0address length in nibbles (semi-octets)
1EXT, TON, NPI
2-11address digits

EXT : 1

TON : Bit 6 5 4  Type Of Number 

Bit
6 5 4
Meaning
0 0 0Unknown
0 0 1International number
0 1 0National number

NPI : Bit 3 2 1 0 : Numbering plan
0 0 0 1ISDN/telephonenumbering
plan (E.164/E.163)

10010001=91 (+)
10100001=A1
10000001=81

0011000A9A89010035850000AB02C8348
00110008A1010035850000AB02C8348
hex(9A)=9×16+10=154(decimal)
hex(A1)=10×16+1=161(decimal)







پس از کشته شدن مرحوم کیان پیرفلک
به دست تروریست‌ها مادر وی سبک 
جدیدی از بلاگری به نام بلاگری خون 
را آغاز کرد. این کار اکنون باعث
 شهادت یک افسر پلیس در ایذه و 
یتیم شدن پنج فرزند او شده است.
 حالا خواهر قاتل افسر پلیس هم به 
بلاگری خون روی آورده است.

















SMS-SUBMIT in 8bit





It is possible to use a 16 bit CSMS reference number in order to reduce the probability that two different concatenated messages are sent with identical reference numbers to a receiver. In this case, the User Data Header shall be:

  • Field 1 (1 octet): Length of User Data Header (UDL), in this case 06.
  • Field 2 (1 octet): Information Element Identifier (IEI), equal to 08 (Concatenated short messages, 16-bit reference number)
  • Field 3 (1 octet): Length of the Information Element (IEL), excluding the IEI and the IEL; equal to 04
  • Field 4 (2 octets): 0000-FFFF, CSMS reference number, must be same for all the SMS parts forming the concatenated message
  • Field 5 (1 octet): 00-FF, total number of parts. The value shall remain constant for every short message which makes up the concatenated short message. If the value is zero then the receiving entity shall ignore the whole information element
  • Field 6 (1 octet): 00-FF, this part's number in the sequence. The value shall start at 1 and increment for every short message which makes up the concatenated short message. If the value is zero or greater than the value in Field 5 then the receiving entity shall ignore the whole information element.




0051000C912943524295050004AA0F060804112F01014869206475646521


-SCA : 00

-PDU Type : 51 (01010001)

from right 

bit0,1: 01:SMS-SUBMIT

bit3,4 : 10 : VPF present

bit6 : UDHI present

-MR : 00

-DA : 0C91294352429505

lengrh : 0C : 12

number : +923425245950

-PID : 00

-DCS : 04 ( 8 bit ) binary

-VPF : AA

-UDL : 0F : 15

-UDHI : 060804112F0101

-UD : 4869206475646521

Hex to string : put above UD 

https://codebeautify.org/hex-string-converter