<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>WinForms</title><link>https://www.dotnetzone.gr:443/cs/forums/12/ShowForum.aspx</link><description>Θέματα για rich client / windows εφαρμογές, σε οποιαδήποτε γλώσσα (VB.NET, C#, managed C++, κ.α.)</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Custom Control για έλεγχο Α.Φ.Μ!</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/74452.aspx</link><pubDate>Wed, 02 Oct 2013 02:38:39 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:74452</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/74452.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=74452</wfw:commentRss><description>&lt;p&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Παναγιώτης Καναβός:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;/p&gt;&lt;p&gt;Όσο για το web service, μου φαίνεται κάπως υπερβολικά υπερβολικό αν σε ενδιαφέρουν λίγες χώρες και μπορείς να βρεις τον αλγόριθμο για το validation της κάθε μίας. Η καθυστέρηση της κλήσης είναι 1000 φορές μεγαλύτερη από την εκτέλεση του validation.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/p&gt;&lt;p&gt;Δε νομίζω ότι πρόκειται για Web Service που κάνει απλό αλγοριθμικό validation. Απ' ό,τι βλέπω, επιστρέφει και στοιχεία που αφορούν την &lt;a href="http://ec.europa.eu/taxation_customs/taxation/vat/traders/vat_number/index_en.htm"&gt;επιχείρηση&lt;/a&gt; (ονομασία, διεύθυνση). Η αναζήτηση πρέπει να γίνεται σε βάση δεδομένων.&lt;br&gt;&lt;/p&gt;</description></item><item><title>Απ: Custom Control για έλεγχο Α.Φ.Μ!</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/74451.aspx</link><pubDate>Wed, 02 Oct 2013 02:24:55 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:74451</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/74451.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=74451</wfw:commentRss><description>&lt;p&gt;ΓΚΡΡΡΡΡΡΡΡΡΡΡΡ&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-12.gif" alt="Angry" /&gt;&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-12.gif" alt="Angry" /&gt;. Δεν κατέβασα το zip. Αλλά διάβασα επιπόλαια και το κείμενο. Αν υπάρχει wrapper class εκεί μέσα είναι μόνο (!!) για τα αυστριακά ΑΦΜ (για τα υπόλοιπα θα ήταν δύσκολο):&lt;/p&gt;&lt;p&gt;&lt;i&gt;Within the zip file attached to this article, you can find a small wrapper class called &lt;code&gt;ViesVatCheck&lt;/code&gt; which adds a heading character for &lt;b&gt;Austrian&lt;/b&gt; VATs when its &lt;code&gt;CheckVat()&lt;/code&gt; method is called.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;Βρήκα κι άλλη μία &lt;a href="http://nephics.com/euvat"&gt;υπηρεσία&lt;/a&gt; αλλά είναι επί πληρωμή.&lt;br&gt;&lt;/p&gt;</description></item><item><title>Απ: Custom Control για έλεγχο Α.Φ.Μ!</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/74450.aspx</link><pubDate>Wed, 02 Oct 2013 02:04:12 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:74450</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/74450.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=74450</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Markos:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;Ίσως το έχεις δει και δεν ξέρω αν όντως η λύση αυτή σου κάνει. Υπάρχει &lt;a href="http://www.codeproject.com/Articles/96944/VIES-VAT-number-checker"&gt;wrapper class&lt;/a&gt; για το VIES - VAT number check &lt;a href="http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl"&gt;web service&lt;/a&gt; στο CodeProject.&lt;/p&gt;&lt;p&gt;Σημ.: Δεν την έχω δοκιμάσει. &lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/p&gt;&lt;p&gt;Μακριά κι αλάργα! Δεν πρόκειται για wrapper. Ο τύπος φαίνεται ότι δεν ξέρει από .NET και δημιουργεί και ASMX service reference με το χέρι. Όλο το άρθρο περιγράφει πως να βάλεις ένα service reference με το δύσκολο τρόπο.&lt;/p&gt;&lt;p&gt;Ο εύκολος τρόπος: Δεξί κλίκ στο References του project, επιλογή Add Service Reference, βάζουμε το URL του WSDL, GO, OK, τελειώσαμε. ΑΑΑΑΑΛΑΑΑΑ προσοχή. Αν κάνουμε αυτό, θα πάρουμε ένα proxy όπου τα In arguments θα έχουν τη μορφή ref parameters και τα output θα έχουν τη μορφή out parameters&lt;/p&gt;&lt;p&gt;ΜΠΛΙΑΧ. Προφανώς το wsdl είναι message-style αντί για RPC style, οπότε, πριν πατήσουμε OK, πατάμε Advanced και τσεκάρουμε το "Always generate Message Contracts". Το αποτέλεσμα θα είναι ένα proxy όπου η checkVat θα παίρνει ένα request object και θα επιστρέφει ένα response object&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Απ: Custom Control για έλεγχο Α.Φ.Μ!</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/74449.aspx</link><pubDate>Wed, 02 Oct 2013 01:56:20 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:74449</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/74449.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=74449</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;gmlogic:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Τι γίνεται όταν περιέχει και γράμματα ;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;"&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Μπλέκεις άσχετα πράγματα. Η σελίδα που δείχνεις περιέχει τη μορφή των ΑΦΜ όλων των κρατών της Ευρωπαϊκής Ένωσης, το καθένα από τα οποία έχει και το δικό φορμάτ και το δικό του τρόπο για να γίνεται η επικύρωση.&amp;nbsp;&lt;span style="font-size:10pt;"&gt;Το ελληνικό ΑΦΜ δεν περιέχει γράμματα και ελέγχεται με τον συγκεκριμένο τρόπο που έχει συζητηθεί.&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;Όσο για το πρόθεμα, απλά το αφαιρείς πριν κάνεις το validation.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Για τις άλλες χώρες, θα πρέπει να βρεις πως γίνεται το validation για την καθεμία. Όσο για το web service, μου φαίνεται κάπως υπερβολικά υπερβολικό αν σε ενδιαφέρουν λίγες χώρες και μπορείς να βρεις τον αλγόριθμο για το validation της κάθε μίας. Η καθυστέρηση της κλήσης είναι 1000 φορές μεγαλύτερη από την εκτέλεση του validation.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Απ: Custom Control για έλεγχο Α.Φ.Μ!</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/74448.aspx</link><pubDate>Wed, 02 Oct 2013 00:30:27 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:74448</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/74448.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=74448</wfw:commentRss><description>&lt;p&gt;Ίσως το έχεις δει και δεν ξέρω αν όντως η λύση αυτή σου κάνει. Υπάρχει &lt;a href="http://www.codeproject.com/Articles/96944/VIES-VAT-number-checker"&gt;wrapper class&lt;/a&gt; για το VIES - VAT number check &lt;a href="http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl"&gt;web service&lt;/a&gt; στο CodeProject.&lt;/p&gt;&lt;p&gt;Σημ.: Δεν την έχω δοκιμάσει. &lt;br&gt;&lt;/p&gt;</description></item><item><title>Απ: Custom Control για έλεγχο Α.Φ.Μ!</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/74447.aspx</link><pubDate>Wed, 02 Oct 2013 00:19:38 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:74447</guid><dc:creator>gmlogic</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/74447.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=74447</wfw:commentRss><description>&lt;p&gt;Αυτό είναι για 9 digit ΑΦΜ.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;"&gt;Τι γίνεται όταν περιέχει και γράμματα ;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a style="font-size:10pt;" href="http://www.taxnews.info/news/vat-afm/"&gt;http://www.taxnews.info/news/vat-afm/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Ευχαριστώ.&lt;/p&gt;</description></item><item><title>Απ: Custom Control για έλεγχο Α.Φ.Μ!</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59752.aspx</link><pubDate>Thu, 26 Aug 2010 04:51:36 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59752</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59752.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=59752</wfw:commentRss><description>Σου έγραψα ήδη όλο τον κώδικα. Αν αξίζει .... δεν αξίζει να γράφεις αργό κώδικα όταν είναι το ίδιο εύκολο, αν όχι ευκολότερο να γράψεις γρήγορο κώδικα. Η διαφορά στην απόδοση είναι κυριολεκτικά 1:10. Τέλος, όσον αφορά το εικονίδιο και τον ErrorProvider, δεν αξίζει να φτιάχνεις από το μηδέν αυτό που σου δίνει το .NET έτοιμο.</description></item><item><title>Απ: Custom Control για έλεγχο Α.Φ.Μ!</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59751.aspx</link><pubDate>Thu, 26 Aug 2010 03:45:36 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59751</guid><dc:creator>Alexpap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59751.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=59751</wfw:commentRss><description>&lt;P&gt;Σε ευχαριστώ για την απάντηση και για τον χρόνο που διέθεσες να το δοκιμάσεις.&lt;/P&gt;
&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Παναγιώτης Καναβός:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Ξαναξέχασες (όπως και στο StudentGuru) να γράψεις ότι το control είναι για WinForms.&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Στο studentguru όντως το είχα ξεχάσει να το αναφέρω, αλλα για διάβασε αυτο το post μου. &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-4.gif" alt="Stick out tongue" /&gt;&amp;nbsp;Οσο για την ταχύτητα του αλγορίθμου, τι θα έκανες εσυ στην θέση μου για να τον κάνεις πιο γρήγορο? Αξιζει κάποια βελτιωση?&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-40.gif" alt="Hmm" /&gt;&lt;/P&gt;</description></item><item><title>Απ: Custom Control για έλεγχο Α.Φ.Μ!</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59740.aspx</link><pubDate>Wed, 25 Aug 2010 20:55:11 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59740</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59740.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=59740</wfw:commentRss><description>Ξέχασες να βάλεις τον κώδικα αλλά δεν πειράζει, υπάρχει και το Reflector&amp;nbsp;&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-4.gif" alt="Stick out tongue" /&gt; Ξαναξέχασες (όπως και στο StudentGuru) να γράψεις ότι το control είναι για WinForms.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Καταρχήν, δεν υπάρχει κανένας λόγος να φτιάξεις τα δικά σου εικονίδια για το validation καθώς το .NET έχει ήδη το &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.errorprovider.aspx"&gt;ErrorProvider&lt;/a&gt; control γι αυτόν ακριβώς το λόγο, από την έκδοση 1.1 και μετά. Δεύτερον, το event το οποίο χρησιμοποιείται για validation στα WinForm controls είναι το Validating. Μπορείς να βέβαια να χρησιμοποιήσεις και το TextChanged για να δώσεις feedback την ώρα που γράφει ο χρήστης. Τρίτο και σημαντικότερο, η υλοποίηση του ελέγχου δεν είναι καθόλου αποδοτική - βασικά είναι η πιο αργή υλοποίηση.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Ο αλγόριθμος του check digit λέει χονδρικά ότι παίρνεις κάθε ψηφίο εκτός από το τελευταίο, το κάνεις shift αριστερά τόσες θέσεις όσο και η θέση του, αθροίζεις τα αποτελέσματα και σε αυτά παίρνεις το modulo 11. Αν το αποτέλεσμα είναι 10 επιστρέφεις 0. Στις γλώσσες που δεν έχουν bit shift operators όπως η Visual Basic 6 αντί για shift αριστερά χρησιμοποιούν την ισοδύμανη ύψωση σε δύναμη του δύο. Η διαφορά στην απόδοση όμως είναι δραματική (10 φορές πιο αργό και βάλε) καθώς αντικαθιστάς ένα binary operation που εκτελείται με 1 CPU instruction, σε πράξεις κινητής υποδιαστολής οι οποίες είναι ΠΟΛΥ πιο αργές.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Πέρα από την προφανή αντικατάσταση του Math.Pow με το &amp;lt;&amp;lt;, ο τρόπος με τον οποίο χειρίζεσαι τα ψηφία θέλει αλλαγή. Δεν υπάρχει λόγος να παίρνεις τα ψηφία με Substring και να τα μετατρέπεις με Parse. &amp;nbsp;Ένα string είναι ένα array από Chars και ένα Char μπορείς να το χειριστείς ως Int32 με τιμή τον κωδικό του χαρακτήρα. Για τους αριθμούς ο κωδικός αυτό είναι ίδιος με το ASCII code τους, ξεκινώντας από το 48 για το '0'. Έτσι μπορείς να πάρεις την τιμή του ψηφίου απλά αφαιρώντας 48. Τέλος, ο τρόπος που υπολογίζεις το modulo, (διαίρεση δια έντεκα, πολλαπλασιασμός πηλίκου με 11, αφαίρεση από διαιρετέο) είναι περιττός καθώς όλες οι γλώσσες έχουν modulo operators οι οποίοι είναι πολύ γρηγορότεροι. Στην περίπτωση της C# αυτός είναι το %.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Ο κώδικας σε C# είναι κάπως έτσι:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;public&lt;/span&gt;  &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;bool&lt;/span&gt; CheckAFM(&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;string&lt;/span&gt; afm)
{
   &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;if&lt;/span&gt; (afm.Length!=9)
       &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;return&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;false&lt;/span&gt;;
   var digits=afm.ToCharArray();
   &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;int&lt;/span&gt; checkDigit &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; digits[8 ]-48;
   &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;long&lt;/span&gt; sum &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; ((digits[7] &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;-&lt;/span&gt; 48) &amp;lt;&amp;lt; 1) &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;+&lt;/span&gt;
       ((digits[6 ] &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;-&lt;/span&gt; 48) &amp;lt;&amp;lt; 2) &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;+&lt;/span&gt;
       ((digits[5] &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;-&lt;/span&gt; 48) &amp;lt;&amp;lt; 3) &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;+&lt;/span&gt;
       ((digits[4] &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;-&lt;/span&gt; 48) &amp;lt;&amp;lt; 4) &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;+&lt;/span&gt;
       ((digits[3] &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;-&lt;/span&gt; 48) &amp;lt;&amp;lt; 5) &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;+&lt;/span&gt;
       ((digits[2] &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;-&lt;/span&gt; 48) &amp;lt;&amp;lt; 6) &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;+&lt;/span&gt;
       ((digits[1] &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;-&lt;/span&gt; 48) &amp;lt;&amp;lt; 7) &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;+&lt;/span&gt;
       ((digits[0] &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;-&lt;/span&gt; 48) &amp;lt;&amp;lt; 8);
  &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;long&lt;/span&gt; mod &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; sum%11;
  &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;if&lt;/span&gt; (mod == 10)
       mod &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; 0;
&lt;span style="background-color:transparent;font-family:'Courier New';font-size:11px;font-weight:normal;"&gt;  &lt;/span&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;return&lt;/span&gt; (mod==checkDigit);
}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Ο λόγος που δεν βρίσκεις "κάτι έτοιμο" είναι από τη μία ότι ο αλγόριθμος είναι πολύ απλός για να χρειάζεται εξειδικευμένο control, από την άλλη το validation πρέπει να γίνεται σε πολλαπλά επίπεδα και δεν μπορεί να "δεθεί" με ένα συγκεκριμένο τύπο control όπως το MaskedTextBox. Αν π.χ. εγώ θέλω να χρησιμοποιήσω controls της Telerik ή της DevExpress ένα "έτοιμο" control για ΑΦΜ θα μου είναι άχρηστο.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;</description></item><item><title>Custom Control για έλεγχο Α.Φ.Μ!</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59735.aspx</link><pubDate>Wed, 25 Aug 2010 18:11:01 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59735</guid><dc:creator>Alexpap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59735.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=59735</wfw:commentRss><description>&lt;P&gt;Καλησπέρα σε όλους,&lt;/P&gt;
&lt;P&gt;Καθώς εφτίαχνα ενα πρόγραμμα, χρειαζόμουν πολλές φορές να ελέγχω το Α.Φ.Μ. ενός πελάτη... Επειδή έχω διαβάσει οτι πολλοί εκει "έξω" ψάχνουν κατι έτοιμο, σκέφτηκα να φτίαξω ενα δικό μου, custom control για winforms, του οποίου η δουλεία είναι να ελέγχει το Α.Φ.Μ., παρουσιάζοντας ενα "Check" εικονίδιο αν το&amp;nbsp;Α.Φ.Μ. είναι σωστό, και ενα "Χ" εικονίδιο αν δεν είναι. Ελπίζω να σας φανεί χρήσιμο. &lt;IMG alt="Big Smile" src="http://www.studentguru.gr/emoticons/emotion-2.gif"&gt;&lt;/P&gt;
&lt;P&gt;ΥΓ: Θέλω να ακούσω τις απόψεις (καλές ή κακές), αυτών των οποίων θα το δοκιμάσουν. &lt;IMG alt=Smile src="http://www.studentguru.gr/emoticons/emotion-1.gif"&gt;&lt;/P&gt;</description></item></channel></rss>